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

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

所以我刚在第二个.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(以及大多数(如果不是全部)JDBC驱动程序)下默认为ResultSet.TYPE_FORWARD_ONLY,因此如果执行类似的操作,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()将起作用。

关于java - 尝试在UCanAccess ResultSet上使用.previous()方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31681200/

10-09 16:37