同时读取数据库中两个表的信息

csdnquestion 2010-04-03 12:35:22
private Connection con;
private Statement stm;
private ResultSet rs1;
private ResultSet rs2;
private String sql;

Class.forName("oracle.jdbc.driver.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","user","pwd");
stm = con.createStatement();

sql="select * from tableA";//tableA有50条记录
rs1 = stm.executeQuery(sql);
System.out.println(rs1.next());//true

sql="select * from tableB";//tableB有400条记录
rs2 = stm.executeQuery(sql);
System.out.println(rs2.next());//true
System.out.println(rs1.next());//false


请问为什么取得第二个记录集后,第一个记录集就关闭了(就是rs1.next()为flase)?


...全文
76 4 打赏 收藏 转发到动态 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tdgwj 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 daijunkai 的回复:]

同一时间每个 Statement 对象在只能打开一个 ResultSet 对象,因此,如果读取另一个 ResultSet 对象,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。
[/Quote]
正解
stm=con.createStatement;
rs2=stm.executeQuery(sql);
amdgaming 2010-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 daijunkai 的回复:]

同一时间每个 Statement 对象在只能打开一个 ResultSet 对象,因此,如果读取另一个 ResultSet 对象,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。
[/Quote]
正解,学习啊。
wenzheng38 2010-04-03
  • 打赏
  • 举报
回复
一楼正解
不知能否有多线程试下,估计也是交叉出现,不可能同时出现两个TRUE吧
daijunkai 2010-04-03
  • 打赏
  • 举报
回复
同一时间每个 Statement 对象在只能打开一个 ResultSet 对象,因此,如果读取另一个 ResultSet 对象,则这两个对象必须是由不同的 Statement 对象生成的。如果存在某个语句的打开的当前 ResultSet 对象,则 Statement 接口中的所有执行方法都会隐式关闭它。
相关推荐

62,566

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告