问题描述
C#里有CommandBehavior.CloseConnection这个东西Java里有吗?或者有没类似功能?我有个方法想返回一个ResultSet关闭后连接对象也关闭
解决方案
解决方案二:
java中可以直接关闭获得的Connection实例,关闭数据库连接实例后,所有建立在这个数据库实例上面的资源,结果集便自动关闭
解决方案三:
该回复于2014-09-22 08:45:05被版主删除
解决方案四:
你可以每次都去关闭ResultSet,pstmt,conn等资源。但是如果你直接关闭connection的话,这个conn上的其他资源也会被关闭,就像楼上说的那样
解决方案五:
对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。
解决方案六:
如果有resultSet的话,一般会有try-catch模块,你可以再catch模块后面的finally模块里面把连接都关了,这样在处理完resultset后会关闭你打开的连接
解决方案七:
引用4楼rumlee的回复:
对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。
这个原则确实是这样的,不过有个特殊的例子:在验证用户登录的时候,是不是只能用下面的步骤?1.先将结果集返回给调用者;2.然后提供一个关闭自身资源的方法;3.最后在调用者完成结果集操作之后,调用关闭资源的方法。
解决方案八:
conn.close;
解决方案九:
可以动态代理,重新resultSet的的close方法
解决方案十:
难道不能转换成一个简单的类似vo这种只包括数据的对象么?到了业务模型的深层不应该再依赖这个连接是否关闭这个条件了吧,业务层应该只知道有数据和没有数据。引用6楼sparrow00004的回复:
Quote: 引用4楼rumlee的回复:
对于connection、resultset等等之类的资源,建议的做法是:遵循谁打开谁关闭,尽量不要在一个方法中打开传入另一个方法中关闭,这样很容易出问题。这个原则确实是这样的,不过有个特殊的例子:在验证用户登录的时候,是不是只能用下面的步骤?1.先将结果集返回给调用者;2.然后提供一个关闭自身资源的方法;3.最后在调用者完成结果集操作之后,调用关闭资源的方法。
解决方案十一:
可以考虑在login去调用一个持久层访问statement时提供一个callback让它来自己取数据。持久层只负责连接到数据库并执行SQL,至于ResultSet中的数据如何使用则用callback来负责,查询完了立即关闭了连接。如:publicvoiddoQuery(Stringsql,Fillercallback){...try{callback.beginData();while(rs.next()){callback.next();}callback.endData();}catch(SQLExceptione){callback.processException(e);}try{rs.close();stmt.close();conn.close();}catch(SQLExceptione){//这里不是Callback的职责。}}
解决方案十二:
如果是javaweb程序,可以在web里加一个过滤器,得到的连接全部放到request里,或者通过ThreadLocal存储当前线程使用的Connection,当返回时,则从request或者从ThreadLocal中取出Connection,并且关闭它。这样,程序别的地方就不用关心连接是否被关闭的事了。