Java里的如果ResultSet关闭 Connection自动关闭怎么实现

q936074874 2014-09-21 03:09:01
C#里有CommandBehavior.CloseConnection 这个东西
Java里有吗? 或者有没类似功能?
我有个方法 想返回一个ResultSet 关闭后连接对象也关闭
...全文
569 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小灰狼 2014-09-25
  • 打赏
  • 举报
回复
如果是 java web 程序,可以在web里加一个过滤器,得到的连接全部放到 request 里,或者通过 ThreadLocal 存储当前线程使用的 Connection,当返回时,则从 request 或者从 ThreadLocal 中取出Connection,并且关闭它。这样,程序别的地方就不用关心连接是否被关闭的事了。
windsunmoon 2014-09-24
  • 打赏
  • 举报
回复
可以动态代理,重新resultSet的的close方法
humanity 2014-09-24
  • 打赏
  • 举报
回复
可以考虑在 login 去调用一个持久层访问 statement 时提供一个 call back 让它来自己取数据。持久层只负责连接到数据库并执行 SQL, 至于 ResultSet 中的数据如何使用则用 callback 来负责,查询完了立即关闭了连接。如:

public void doQuery(String sql, Filler callback) {
     ...
     try {
     callback.beginData();
     while(rs.next() ) {
               callback.next(); 
    }
    callback.endData();
   } catch (SQLException e) {
         callback.processException(e);
   }
  try {
    rs.close();
   stmt.close();
   conn.close();
   } catch (SQLException e) {
     // 这里 不是Callback 的职责。
   }
}
humanity 2014-09-24
  • 打赏
  • 举报
回复
难道不能转换成一个简单的类似 vo 这种只包括数据的对象么?到了业务模型的深层不应该再依赖这个连接是否关闭这个条件了吧,业务层应该只知道有数据和没有数据。
引用 6 楼 sparrow00004 的回复:
[quote=引用 4 楼 rumlee 的回复:] 对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。
这个原则确实是这样的,不过有个特殊的例子:在验证用户登录的时候,是不是只能用下面的步骤? 1.先将结果集返回给调用者; 2.然后提供一个关闭自身资源的方法; 3.最后在调用者完成结果集操作之后,调用关闭资源的方法。[/quote]
qq383692862 2014-09-23
  • 打赏
  • 举报
回复
如果有resultSet的话,一般会有try-catch模块,你可以再catch模块后面的finally模块里面把连接都关了,这样在处理完resultset后会关闭你打开的连接
rumlee 2014-09-23
  • 打赏
  • 举报
回复
对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。
w_l_o_v_e_c 2014-09-23
  • 打赏
  • 举报
回复
conn.close;
码上行动_Light 2014-09-23
  • 打赏
  • 举报
回复
引用 4 楼 rumlee 的回复:
对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。
这个原则确实是这样的,不过有个特殊的例子:在验证用户登录的时候,是不是只能用下面的步骤? 1.先将结果集返回给调用者; 2.然后提供一个关闭自身资源的方法; 3.最后在调用者完成结果集操作之后,调用关闭资源的方法。
scott_129 2014-09-22
  • 打赏
  • 举报
回复
你可以每次都去关闭ResultSet,pstmt,conn等资源。 但是如果你直接关闭connection的话,这个conn上的其他资源也会被关闭,就像楼上说的那样
姜小白- 2014-09-21
  • 打赏
  • 举报
回复
java中可以直接关闭获得的Connection 实例,关闭数据库连接实例后,所有建立在这个数据库实例上面的资源,结果集便自动关闭

62,620

社区成员

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

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