我正在使用火鸟。我知道在 Firebird 中我们不能将结果集光标移回。仅支持TYPE_FORWARD_ONLY
,TYPE_SCROLL_INSENSITIVE
尚不支持。在我的应用程序中,我想像使用 this 一样将结果集游标移回一排resultSet.previous()
。我想知道是否有任何方法可以将光标移回。
查看 Firebird 的文档:
JDBC 3.0 规范定义了三种类型的结果集
- TYPE_FORWARD_ONLY:结果集不可滚动,光标只能向前移动。当使用 TRANSACTION_READ_COMMITTED 隔离级别时,结果集将返回在 ResultSet.next() 调用时满足搜索条件的所有行。在其他情况下,结果集将仅返回在事务开始时可见的行。
- TYPE_SCROLL_INSENSITIVE:结果集是可滚动的,游标可以前后移动,可以定位在指定的行上。只有在查询执行时满足条件的行才可见。
- TYPE_SCROLL_SENSITIVE:Firebird 和 Jaybird 不支持。驱动程序允许应用程序请求这种类型的结果集,但是根据 JDBC 规范,该类型被“降级”为以前的类型,并且相应的警告被添加到连接对象中。
由于 Firebird 中缺少对可滚动游标的支持,它们的支持(TYPE_SCROLL_INSENSITIVE结果集类型)是通过将完整的结果集获取到客户端来实现的。滚动发生在客户端的内存中。当结果集很大时,这会对系统内存使用和性能产生不利影响。
这只是我认为会有所帮助的一段代码:
while (res.next()) {
if (!id.equalsIgnoreCase(res.getString("NO_TRANSFERT"))) {
res.previous();
break;
}
xml = xml + "<" + tableName + ">\n";
for (int i = 1; i <= count; i++) {
String columnName = rsmd.getColumnName(i);
xml = xml + "<" + columnName + ">" + res.getString(i) + "</"
+ columnName + ">\n";
}
xml = xml + "</" + tableName + ">\n\n";
}
从聊天中,用于创建的代码Statement
是:
public static ResultSet selectAll(String table) throws SQLException {
String query = "SELECT * FROM " + table;
PreparedStatement ps = connection.prepareStatement(query);
ResultSet res = ps.executeQuery();
return res;
}