一个Statement不能同时使用两个ResultSet是嘛?

时间:2022-03-10 03:21:10
就是说一个数据库连接,当使用
ResultSet rs1 = dbStatement.executeQuery(strSQL);
后,如果再使用
ResultSet rs2 = dbStatement.executeQuery(strSQL);
那么rs1的结果会被冲掉是嘛?具体表现就是rs2.close()执行后,rs1也不能用了。

这样如果要同时使用两个结果集必须建立两个连接,是嘛?

16 个解决方案

#1


应该不能,rs1可能取不出数据。老早之前遇到了这么一个bug,调试了很久呢

#2


你可以在建立第二个结果集之前先把第一个的数据读出来,因为已经读出的数据是静态的,不会随时间而改变。

#3


to shos:
不行的,我的是异步过程,两个结果集根本没法断定谁先谁后。
我建立两个连接一点问题也没有了。
不过很郁闷。难道Java只能这样?
我想在一个类里共享一个连接,不必每次使用的时候都要去建立连接。建立连接难道不花费时间资源嘛?!
但是这种要求JDBC都不能满足?别的语言就可以。是不是Connection可以共享,Statement不能共享?没试过。谁提供一点经验?

#4


一般情况下,这中情况最好建立两个Statement来实现你不同的操作,可能在有些时候这问题
没有显现出来,但是这种情况下一定会出问题:
 ResultSet rs1 = dbStatement.executeQuery(strSQL);
while(rs1.next())
   {
      ResultSet rs2 = dbStatement.executeQuery(strSQL);
 }

就会出现问题那!所以建议在做不同的操作时候还是有区分的好!

#5


一个Statement只能给一个ResultSet提供数据,这是java的规矩

#6


Statement并不是连接, 类似于Query.
1个Connect中可以有多个Statement.
Statement关闭后,结果集自然就没有了.

#7


Statement开辟对数据库的一个访问区,而ResultSet封装了数据库的游标,对Statement进行访问。所以,ResultSet和Statement是对应的,一个Statement不能对应两个ResultSet。

Statment表示的不是连接,Connection才是,这也是为什么事务管理是由Connection来负责的

#8


楼上的理论是正确的

#9


长见识!

#10


一个Statement只能给一个ResultSet提供数据
这中情况最好建立两个Statement来实现你不同的操作
我有碰到过这种情况,用了三个dbStatement
最好区分开,不然肯定会出问题

#11


使用两个bean来存这两个结果集的数据

#12


先处理第一个rs,然后在执行ResultSet rs2 = dbStatement.executeQuery(strSQL);在处理第二个rs

#13


只能使用两个statement才可以,statement和resultset是一一对应的

#14


最好一次只使用一个statement,
两个或两个以上速度很慢的。

你为什么要两个ResultSet,
你可以先取出一个结果放在数组里来尽量满足你的要求啊,
或者用sql语句。

#15


这是生命周期的问题,用一个RESULTSET后,自动消亡!

#16


失败

#1


应该不能,rs1可能取不出数据。老早之前遇到了这么一个bug,调试了很久呢

#2


你可以在建立第二个结果集之前先把第一个的数据读出来,因为已经读出的数据是静态的,不会随时间而改变。

#3


to shos:
不行的,我的是异步过程,两个结果集根本没法断定谁先谁后。
我建立两个连接一点问题也没有了。
不过很郁闷。难道Java只能这样?
我想在一个类里共享一个连接,不必每次使用的时候都要去建立连接。建立连接难道不花费时间资源嘛?!
但是这种要求JDBC都不能满足?别的语言就可以。是不是Connection可以共享,Statement不能共享?没试过。谁提供一点经验?

#4


一般情况下,这中情况最好建立两个Statement来实现你不同的操作,可能在有些时候这问题
没有显现出来,但是这种情况下一定会出问题:
 ResultSet rs1 = dbStatement.executeQuery(strSQL);
while(rs1.next())
   {
      ResultSet rs2 = dbStatement.executeQuery(strSQL);
 }

就会出现问题那!所以建议在做不同的操作时候还是有区分的好!

#5


一个Statement只能给一个ResultSet提供数据,这是java的规矩

#6


Statement并不是连接, 类似于Query.
1个Connect中可以有多个Statement.
Statement关闭后,结果集自然就没有了.

#7


Statement开辟对数据库的一个访问区,而ResultSet封装了数据库的游标,对Statement进行访问。所以,ResultSet和Statement是对应的,一个Statement不能对应两个ResultSet。

Statment表示的不是连接,Connection才是,这也是为什么事务管理是由Connection来负责的

#8


楼上的理论是正确的

#9


长见识!

#10


一个Statement只能给一个ResultSet提供数据
这中情况最好建立两个Statement来实现你不同的操作
我有碰到过这种情况,用了三个dbStatement
最好区分开,不然肯定会出问题

#11


使用两个bean来存这两个结果集的数据

#12


先处理第一个rs,然后在执行ResultSet rs2 = dbStatement.executeQuery(strSQL);在处理第二个rs

#13


只能使用两个statement才可以,statement和resultset是一一对应的

#14


最好一次只使用一个statement,
两个或两个以上速度很慢的。

你为什么要两个ResultSet,
你可以先取出一个结果放在数组里来尽量满足你的要求啊,
或者用sql语句。

#15


这是生命周期的问题,用一个RESULTSET后,自动消亡!

#16


失败