尝试在 UCanAccess ResultSet 上使用 .previous() 方法

Trying to use the .previous() method on a UCanAccess ResultSet

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

问题是 ResultSet 没有 hasNext() 方法,只有 next()。 因此,我尝试在使用 .previous() 的第一个 .next() 方法之后返回,但出现 "feature not supported" 错误。

所以我在第二次 .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 页。

JDBC 语句对象在 UCanAccess 下默认为 ResultSet.TYPE_FORWARD_ONLY(如果不是全部,也是大多数 JDBC 驱动程序),因此如果您执行类似 rs.previous() 的操作,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() 就可以了。