【问题标题】:Does CachedRowSet work with all ResultSet implementations?CachedRowSet 是否适用于所有 ResultSet 实现?
【发布时间】:2009-06-12 08:56:15
【问题描述】:

我正在尝试使用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 和 Sun JRE 上都试过了。

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

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

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

【问题讨论】:

    标签: java jdbc cachedrowset


    【解决方案1】:

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

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

    【讨论】:

    • 包含驱动程序的 jar 有一个 AS400JDBCRowSet 类,所以我想这不是问题。此外,我们设法让它与 6.0 JRE 和相同的驱动程序一起工作。不过谢谢:)
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2011-08-09
      • 2016-11-08
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多