【问题标题】:Trying to use the .previous() method on a UCanAccess ResultSet尝试在 UCanAccess ResultSet 上使用 .previous() 方法
【发布时间】:2015-07-28 15:44:54
【问题描述】:

我正在处理来自 Facebook 的批处理信息。 我已经决定获得我想要的结果的最佳方法是有 2 个循环,而两者都是关于我的结果集是否有 .next() ....

问题是结果集没有hasNext() 方法,而只有next()。 因此,我尝试在使用 .previous() 的第一个 .next() 方法之后返回,但出现“不支持的功能”错误。

所以我在第二个 .next() 之后又试了一次,结果还是一样....

您似乎无法在 UCanAccess 下使用.previous()

例外是——

net.ucanaccess.jdbc.UcanaccessSQLException: feature not supported
at net.ucanaccess.jdbc.UcanaccessResultSet.previous(UcanaccessResultSet.java:933)

代码部分-

int i = 1;
        try {
        idsLoop:while(rs.next()){
            if(i==1){
                rs.previous();
            }
            if(i<50){
                idsForRequest.add(rs.getString("Expr1"));
                i++;
                }
                else{
                    i=1;
                    break idsLoop; 
                }

顺便说一句,如果有人想知道我为什么这样做,是因为我不想一次批处理超过 50 页。

【问题讨论】:

    标签: java jdbc ucanaccess


    【解决方案1】:

    UCanAccess 下的 JDBC 语句对象默认为 ResultSet.TYPE_FORWARD_ONLY(如果不是全部,也是大多数 JDBC 驱动程序),因此如果您执行类似的操作,rs.previous() 将失败

    try (Statement st = conn.createStatement()) {
        try (ResultSet rs = st.executeQuery(sql)) {
            // ...
            rs.previous();  // <- error
    

    但是,如果您在创建 Statement 对象时指定了可滚动的 ResultSet ...

    try (Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
        try (ResultSet rs = st.executeQuery(sql)) {
            // ...
            rs.previous();  // <- no error
    

    ...那么rs.previous() 就可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-08
      • 2015-06-21
      • 1970-01-01
      • 2023-01-16
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      相关资源
      最近更新 更多