代码之家  ›  专栏  ›  技术社区  ›  Harry Lime

CachedRowSet是否适用于所有ResultSet实现?

  •  0
  • Harry Lime  · 技术社区  · 17 年前

    我正在尝试使用 CachedRowSet 传呼 AS400JDBCResultSet 包含我的查询结果。

    我试过使用

    CachedRowSet cachedRowSet = new CachedRowSetImpl();
    cachedRowSet.setMaxRows(10);
    cachedRowSet.setPageSize(10);
    cachedRowSet.populate(resultSet);
    

    方法,但在第一页返回完整的结果集(65条记录)(即通过调用 cachedRowSet.next() ).我也试过

    CachedRowSet cachedRowSet = new CachedRowSetImpl();
    cachedRowSet.setPageSize(10);
    cachedRowSet.setMaxRows(0);
    cachedRowSet.setUsername("username");
    cachedRowSet.setPassword("password");
    cachedRowSet.setUrl("jdbc:as400://dev;naming=system;libraries=*LIBL;prompt=false;");
    cachedRowSet.setCommand(query);
    cachedRowSet.execute(connection);
    

    方法,但我在 execute() 呼叫

    Exception in thread "main" java.lang.AbstractMethodError: java/sql/DatabaseMetaData.locatorsUpdateCopy()Z
        at com.sun.rowset.CachedRowSetImpl.initMetaData(CachedRowSetImpl.java:712)
        at com.sun.rowset.CachedRowSetImpl.populate(CachedRowSetImpl.java:617)
        at com.sun.rowset.internal.CachedRowSetReader.readData(CachedRowSetReader.java:190)
        at com.sun.rowset.CachedRowSetImpl.execute(CachedRowSetImpl.java:756)
    

    我在IBM和;孙杰。

    有什么想法吗?我的JDBC驱动程序不支持这个功能吗?

    更新: MySQL驱动程序也会发生这种情况——所以我肯定是做错了什么,对吧?

    更新(2): 已在Java 5.0上运行;MySql的6.0 Driver ,但仅适用于我的 AS400JDBCDriver -两者都使用上述方法2。在任何情况下似乎都很慢。

    2 回复  |  直到 17 年前
        1
  •  0
  •   skaffman    17 年前

    听起来您的驱动程序可能不符合JDBC 3.0,这是在API中引入行集的时候。AbstractMethodError支持这一点。

    查看驱动程序文档,看看它声称支持哪个JDBC版本。

        2
  •  -2
  •   bluish dmajkic    14 年前

    随着Java的更新版本,驱动程序的调用方式发生了变化。旧学校有额外的锅炉板,但它仍然可以使用Java6。

    Connection c = null;
    try {
            Class.forName(driverString);
        } catch (ClassNotFoundException e) {
            //TODO
        }
    c = DriverManager.getConnection(url, username, password);
    
    推荐文章