4

我从同一个Statement对象生成了 2 个ResultSet 。

代码示例如下:

Connection con            = null;
Statement  stmt           = null;
ResultSet rs = null;

con = DBAccess.getConnection();
stmt = con.createStatement();

rs = stmt.executeQuery(Query1);
// operate on the resultset

rs = stmt.executeQuery(Query2);   // Is it legal and do not have side-effects?
// operate on the resultset

// close everythings (Resultset, Statement, Connection)

我检查它运行良好。我怀疑它会有任何副作用吗?

4

3 回答 3

9

javadoc

默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象。因此,如果一个 ResultSet 对象的读取与另一个 ResultSet 对象的读取交错,则每个对象都必须由不同的 Statement 对象生成。Statement 接口中的所有执行方法都会隐式关闭语句的当前 ResultSet 对象(如果存在打开的对象)。

所以是的,你可以安全地做到这一点。执行第二个查询后,您就无法使用第一个结果集。

于 2012-07-18T18:12:21.960 回答
1

每个语句对象只有一个Resultset 对象。因此,当您执行另一个查询时,它会在内部关闭现有的结果集对象并打开一个新的结果集对象。但是您无法访问以前的结果集对象。

不会有副作用。你可以随心所欲地使用它。

于 2012-09-22T09:47:33.290 回答
0

请记住在使用相同变量引用第二个结果集之前关闭第一个结果集。如果仅在执行第二条语句后关闭结果集,则第二个结果集将关闭,而第一个结果集不会关闭。

于 2012-09-11T21:17:01.517 回答