尝试在 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()
就可以了。
我正在处理来自 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()
就可以了。