我正在处理来自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/