【发布时间】:2012-08-22 15:34:00
【问题描述】:
问题:您能否在非 MULTI THREAD 中使用同一连接同时操作多个语句和记录集?
我只发现了我感兴趣的这个问题,但答案并不一致。
JDBC Statement/PreparedStatement per connection
答案解释了我所知道的记录集和语句之间的关系。
鉴于此,您不能有多个记录集用于语句
答案说您可以有多个记录集进行连接。但没有提及任何其他来源。
我问是否可以循环第一个记录集,然后使用相同的连接(用于生成第一个记录集)打开另一个记录集,使用它在迭代中循环。定义此行为的文档在哪里?
我感兴趣的情况是这样的,语句中同时执行任务
Connection con = Factory.getDBConn (user, pss, endpoint, etc);
Statement stmt = con.createStatement ();
ResultSet rs = stmt.executeQuery ("SELECT TEXT FROM dba");
while (rs.next ()) {
rs.getInt (....
rs.getInt (....
rs.getInt (....
rs.getInt (....
Statement stmt2 con.createStatement = ();
ResultSet rs2 = stmt2.executeQuery ("iSelect ......");
while (rs2.next ()) {
....
rs2.close ();
stm2.close ();
Statement stmt3 con.createStatement = ();
ResultSet rs3 = stmt3.executeQuery ("Insert Into table xxx ......");
....
rs3.close ();
stm3.close ();
}
再澄清一点:在stmt3中执行更新,你可能会得到这样的错误:
java.sql.SQLException:当前连接上有一个打开的结果集,在执行查询之前必须关闭它。
所以你不能在同一个连接中混合 SQL。
【问题讨论】:
-
这里好像没有问题。你到底在问什么?
-
是的,没有问号......无论如何。我在问是否可以循环第一个记录集,然后使用相同的连接(用于生成第一个记录集)打开另一个记录集,使用它并继续迭代。定义这种行为的文档在哪里?
-
是的,这是可能的,只要您不尝试使用相同的语句来创建记录集(在问题的代码中,您不是)。
标签: sql jdbc connection