renchao773 2008-10-15 09:11
浏览 376
已采纳

问个有关JDBC,ResultSet对像多次使用后再关闭的问题,困扰许久,望各位指点明津,谢谢

//代码
...
ResultSet rs = this.conn.prepareStatement("select * from test1").executeQuery(); //注sql语句不同
while(rs.next()){
  ...
}
rs = this.conn.prepareStatement("select * from test2").executeQuery(); //注sql语句不同
while(rs.next()){
  ...
}
rs = this.conn.prepareStatement("select * from test3").executeQuery(); //注sql语句不同
while(rs.next()){
  ...
}
...
rs.getStatement().close();

//疑问1:多次使用rs对象后,我在最后关闭一次,这样有没有问题?还是要每次用完都关闭(如上代码要关3次rs?)
//疑问2:使用rs.getStatement().close();关闭前,有没有必要先使用rs.close();关闭,每次都是吗(如上代码要关3次rs?)?

  • 写回答

4条回答 默认 最新

  • zhuyx808 2008-10-15 10:46
    关注

    正常情况下如果使用Statement执行完一个查询,又去执行另一个查询时这时候第一个查询的结果集就会被关闭,也就是说,所有的Statement的查询对应的结果集是一个,如果调用Connection的commit()方法也会关闭结果集。可保持性就是指当ResultSet的结果被提交时,是被关闭还是不被关闭。JDBC2.0和1.0提供的都是提交后ResultSet就会被关闭。不过在JDBC3.0中,我们可以设置ResultSet是否关闭。要完成这样的ResultSet的对象的创建,要使用的Statement的创建要具有三个参数,这个Statement的创建方式也就是,我所说的Statement的第三种创建方式。如下:

    Statement st=createStatement(int resultsetscrollable,int resultsetupdateable,int resultsetSetHoldability)
    ResultSet rs = st.excuteQuery(sqlStr);

    前两个参数和两个参数的createStatement方法中的参数是完全相同的,这里只介绍第三个参数:
    resultSetHoldability表示在结果集提交后结果集是否打开,取值有两个:
    ResultSet.HOLD_CURSORS_OVER_COMMIT:表示修改提交时,不关闭数据库。
    ResultSet.CLOSE_CURSORS_AT_COMMIT:表示修改提交时ResultSet关闭。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入
  • ¥20 XP系统在重新启动后进不去桌面,一直黑屏。
  • ¥15 opencv图像处理,需要四个处理结果图