PreparedStatement和ResultSet的关闭问题???

gogoxu 2004-10-25 04:42:22
如下:
sql = "SELECT code1 FROM table1 WHERE code1=?";
PreparedStatement1 = connection.prepareStatement(sql);
PreparedStatement1.setString(1, code1);
ResultSet1 = PreparedStatement1.executeQuery();
if (ResultSet1.next()) {
//;
}

sql =
"SELECT code2 FROM table2 WHERE code2=?";
PreparedStatement1 = connection.prepareStatement(sql);
PreparedStatement1.setString(1, code2);
ResultSet1 = PreparedStatement.executeQuery();
if (ResultSet1.next()) {
//;
}
ResultSet1.close();
PreparedStatement1.close();

第一次查询的游标是不是没有关闭?垃圾收集能收集掉吗?还是永远驻留在内存?
...全文
289 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
GJA106 2005-01-14
  • 打赏
  • 举报
回复
会存在这种情况。必需关闭掉。现在jdk也支持关闭connection时自动把resultset也关闭。
gogoxu 2004-12-02
  • 打赏
  • 举报
回复
没人能彻底的解释一下吗?
常修溢 2004-11-01
  • 打赏
  • 举报
回复
关注
gogoxu 2004-11-01
  • 打赏
  • 举报
回复
当然如楼上所写是可以的,但是如果用了相同的PrepareStatement实例,实际执行是如何的呢?会不会有什么问题(内存泄漏,数据库游标不释放)呢,有没有人能深入的解释一下。
lydong 2004-10-25
  • 打赏
  • 举报
回复
两个ResultSet最好不要使用同一PrepareStatement实例,在使用完ResultSet之后,应尽早将它关闭。
try{
...
sql = "SELECT code1 FROM table1 WHERE code1=?";
preparedStatement1 = connection.prepareStatement(sql);
preparedStatement1.setString(1, code1);
resultSet1 = preparedStatement1.executeQuery();
if (resultSet1.next()) {
//;
}
resultSet1.close();
preparedStatement1.close();

sql =
"SELECT code2 FROM table2 WHERE code2=?";
preparedStatement2 = connection.prepareStatement(sql);
preparedStatement2.setString(1, code2);
resultSet2 = preparedStatement2.executeQuery();
if (resultSet2.next()) {
//;
}
resultSet2.close();
preparedStatement2.close();
..
}
finally{
if (connection!=null) connection.close();
}

1,220

社区成员

发帖
与我相关
我的任务
社区描述
企业软件 中间件技术
社区管理员
  • 中间件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧