0

我正在尝试使用包含查询结果的分页来实现数据库分页解决方案(仅需要转发CachedRowSetAS400JDBCResultSet

我试过使用

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 和 Sun JRE。

有任何想法吗?我的 JDBC 驱动程序是否完全不支持此功能?

更新: MySQL驱动程序也会发生 - 所以我一定做错了什么,对吧?

更新(2):让它在 Java 5.0 和 6.0 上运行 MySql's Driver,但只在我的 6.0 上运行AS400JDBCDriver- 两者都使用上面的方法 2。在任何情况下似乎都很慢。

4

2 回答 2

0

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

检查您的驱动程序文档以查看它声称支持的 JDBC 版本。

于 2009-06-12T13:39:26.600 回答
-2

调用驱动程序的方式随着 Java 的更新版本而改变。老派有额外的样板,但它仍然适用于 Java 6。

Connection c = null;
try {
        Class.forName(driverString);
    } catch (ClassNotFoundException e) {
        //TODO
    }
c = DriverManager.getConnection(url, username, password);
于 2009-06-24T00:29:59.190 回答