谈谈 Statement与ResultSet的关系!(100分)

  • 主题发起人 主题发起人 zhuad
  • 开始时间 开始时间
Z

zhuad

Unregistered / Unconfirmed
GUEST, unregistred user!
今想做个递归调用数据库的模块,由于数据连接非常耗费时间和资源,我打算用一个Connection
来解决,但这也就与多个ResultSet相关,按JDBC2的可修改结果集(ResultSet),由Statement
返回的结果集(ResultSet),是否必须有一个Statement相之对应才能进行数据库的修改?
例:(两个表用同一个Statement情况)
....
Connection connection=...
stm=connection.creatStatement(.....)
rs1=stm.executeQuery("select * from table1 ");
rs2=stm.executeQuery("select * from table2 ");
rs1.next();
rs2.next();
rs1.Update("field","value");
rs2.Update("field","value");
connection.commit();
是否正确?
rs1、rs2为同一表时又是否正确呢?
如果使用一函数来返回结果集,也就是用不同的Statement 是否可以?
例:(一个表对应一个Statement,但不在同一函数内,也不是类的元素)
....
Connection connection=...
...
ResultSet Query(String sqlString){
Statement stm=connection.createStatement(...);
return stm.executeQuery("select * from ...");
}
...
rs1=Query("select * from table1 ");
rs2=Query("select * from table2 ");
rs1.next();
rs2.next();
rs1.Update("field","value");
rs2.Update("field","value");
connection.commit();
.....
也就是ResultSet中是否自动保留Statementt 和 Connection 的实例?
 
否。
result是和Statement相关的。
在一个connection中,请保证这样的顺序:
PreparedStatement ps = con.preparedStatement('');
ResultSet rs = ps.executeQuery();
rs.close();
ps.close();
在上一个statement没有完成之前,不要继续下一个statement
 
java文档写的很清楚,
Only one ResultSet per Statement can be open at any point in time.
Therefore, if the reading of one ResultSet is interleaved with the
reading of another, each must have been generated by different Statements.
All statement execute methods implicitly close a statment's current ResultSet
if an open one exists.
 
楼上两位!先谢了,我明白了每个ResultSet 必须对应一个 Statement!
但还想请教一下例二情况如何,这算保证了一ResultSet对应一个Statement,虽在另一
方法中,但按JAVA的传值应是可以的,对吗?
还有一个Connection不一定对应一个Statement吗?也即一个Connection可以建立多个
Statemete,各自修改后的结果集(ResultSet),一并由Connection提交,这是可行的吗?
弄清这两个问题后就结束本讨论了!
 
1、证了一ResultSet对应一个Statement,虽在另一方法中,但按JAVA的传值应是可以的
2、一个Connection当然不是需要对应一个Statement,也即一个Connection可以建立多个
Statemete,各自修改后的结果集(ResultSet),一并由Connection提交,这是可行的
有些东西没试过谁也不敢说,其实你自己写上去一试就知道了,否则别人说行,你自己一试不行,还是没用
 
谢谢Pipi.,实践当然是检验真理的唯一标准!如果能从大家哪里学到,应该是更好一些!
 
后退
顶部