在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
一个坏主意?
答案 0 :(得分:4)
在Java中使用相同的ResultSet对象是不是习惯?
我想说这取决于特定的要求和编码方式。
我相信你所寻找的是一个可滚动的ResultSet,它是作为版本2.0 / 2.1(集成到JDK 1.2)中的一个新的改进功能引入的,它有两个口味:TYPE_SCROLL_INSENSITIVE和TYPE_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)
完成表格后,您可以关闭相应的结果集。并且相同的参考可以用于另一个表。
如果要同时查询表和视图,则需要两个单独的结果集。