在Java中多次使用相同的ResultSet

时间:2013-07-05 08:44:37

标签: java derby

在Java中使用相同的ResultSet对象是不是习惯?为什么或者为什么不? //这似乎是我唯一的选择,因为我试图查询表的记录计数,然后查询该表的视图;我不知道如何改变观点。

换句话说,是

ResultSet myResultSet = statement.executeQuery("SELECT count(*) FROM table");
myResultSet.next();
int recordCount = myResultSet.getInt(1);
myResultSet = statement.executeQuery("SELECT * FROM tableView");
//set other variables based on contents of fetched view

一个坏主意?

3 个答案:

答案 0 :(得分:4)

  

在Java中使用相同的ResultSet对象是不是习惯?

我想说这取决于特定的要求和编码方式。

我相信你所寻找的是一个可滚动的ResultSet,它是作为版本2.0 / 2.1(集成到JDK 1.2)中的一个新的改进功能引入的,它有两个口味:TYPE_SCROLL_INSENSITIVETYPE_SCROLL_SENSITIVE

如果我们看到您发布的代码:

ResultSet myResultSet = statement.executeQuery("SELECT count(*) FROM table");
myResultSet.next();
int recordCount = myResultSet.getInt(1);
myResultSet = statement.executeQuery("SELECT * FROM tableView");

您基本上要做的是将myResultSet引用变量设置为新的ResultSet对象。我没有看到任何不好的事情,或许比我更开明的人可以指出。

答案 1 :(得分:3)

您发布的代码不会“重复使用相同的ResultSet”,它只会丢弃一个ResultSet对象,然后使用相同的变量来保存对创建的其他ResultSet的引用到第二个executeQuery。在用第二个结果集覆盖引用之前,在第一个结果集上调用close()将是一个很好的编码实践,但这不是绝对必要的,因为

  

ResultSet对象在生成它的Statement对象关闭,重新执行时自动关闭,或者用于从多个序列中检索下一个结果结果

(来自ResultSet JavaDoc documentation,我的大胆)

答案 2 :(得分:2)

完成表格后,您可以关闭相应的结果集。并且相同的参考可以用于另一个表。

如果要同时查询表和视图,则需要两个单独的结果集。