代码之家  ›  专栏  ›  技术社区  ›  Bar Hoshen

正在尝试对UCanAccess ResultSet使用.prprevious()方法

  •  1
  • Bar Hoshen  · 技术社区  · 9 年前

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

    问题是ResultSet没有 hasNext() 方法,但仅限于 next() . 所以我试着在第一次 .next() 方法使用 .previous() 我得到一个“功能不受支持”的错误。

    所以我在第二次之后又试了一次 .next() 它说的是同样的事情。。。。

    看来你不能用 .previous() UCanAccess下。

    例外情况是-

    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页。

    1 回复  |  直到 9 年前
        1
  •  3
  •   Gord Thompson    9 年前

    JDBC语句对象默认为 ResultSet.TYPE_FORWARD_ONLY 在UCanAccess(以及大多数(如果不是全部)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() 将起作用。