14 个解决方案
#1
分少没人来吗 ~~~~(>_<)~~~~
#2
关闭是节省资源。最好是按顺序关掉
#3
打开顺序:
Connection
PreparedStatement
Result
关闭顺序:
Result
PreparedStatement
Connection
PS:我认为其实关闭的时候直接关闭Connection也就行了,没事。( 欢迎对这个结论拍砖)
Connection
PreparedStatement
Result
关闭顺序:
Result
PreparedStatement
Connection
PS:我认为其实关闭的时候直接关闭Connection也就行了,没事。( 欢迎对这个结论拍砖)
#4
只要关闭connection,其他的都会被关闭
当然如果你在循环里用同一个connection查询处理多个结果集,那么你可能需要考虑在用完每个结果集后关闭它们
当然如果你在循环里用同一个connection查询处理多个结果集,那么你可能需要考虑在用完每个结果集后关闭它们
#5
但是最好按照以下顺序关闭:rs(同一个连接有多个rs在每个就用完之后就立即close),stmt(同rs),conn
原因如下:
The JDBC spec requires that a Connection close any open Statement's when it is closed
JDBC规范要求关闭连接的时候同时关闭任何与其关联的打开的Statement
一般情况下关闭close都没问题
但是,如果碰到一个不负责任的数据库连接池就不好说了
连接池重写了Connection了close方法,当调用这个方法时不关闭底层连接,而是将连接放回池中。一个负责任的连接池都应该在此时将rs和stmt物理关闭,不负责任的就可能没有将rs和stmt关闭,直接将conn丢回池中,最终可能导致OutOfMemory
在dbcp中重写的close方法里就passivate这样一个方法调用,就是用来关闭rs和stmt的
原因如下:
The JDBC spec requires that a Connection close any open Statement's when it is closed
JDBC规范要求关闭连接的时候同时关闭任何与其关联的打开的Statement
一般情况下关闭close都没问题
但是,如果碰到一个不负责任的数据库连接池就不好说了
连接池重写了Connection了close方法,当调用这个方法时不关闭底层连接,而是将连接放回池中。一个负责任的连接池都应该在此时将rs和stmt物理关闭,不负责任的就可能没有将rs和stmt关闭,直接将conn丢回池中,最终可能导致OutOfMemory
在dbcp中重写的close方法里就passivate这样一个方法调用,就是用来关闭rs和stmt的
#6
四哥V5
#7
最好还是按照Result,PreparedStatement,Connection顺序进行关闭
#8
四楼说得很详细,学习了
#9
分少有人来的!
#10
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#11
按要求关闭吧,我用过 Sybase 的驱动,没自己关闭 ResultSet 和 Statement 的时候还是导致连接被用尽,可能 JDBC 2.0 和 3.0 在细节上还是有点差别,我们最好是把自己应该做的事情自己做了,而不要指望自动去做,不同的实现版本可能细节不同,依赖实现细节的代码会碰到移植性的问题,而且很难查觉错误在哪里。
#12
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#13
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#14
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#1
分少没人来吗 ~~~~(>_<)~~~~
#2
关闭是节省资源。最好是按顺序关掉
#3
打开顺序:
Connection
PreparedStatement
Result
关闭顺序:
Result
PreparedStatement
Connection
PS:我认为其实关闭的时候直接关闭Connection也就行了,没事。( 欢迎对这个结论拍砖)
Connection
PreparedStatement
Result
关闭顺序:
Result
PreparedStatement
Connection
PS:我认为其实关闭的时候直接关闭Connection也就行了,没事。( 欢迎对这个结论拍砖)
#4
只要关闭connection,其他的都会被关闭
当然如果你在循环里用同一个connection查询处理多个结果集,那么你可能需要考虑在用完每个结果集后关闭它们
当然如果你在循环里用同一个connection查询处理多个结果集,那么你可能需要考虑在用完每个结果集后关闭它们
#5
但是最好按照以下顺序关闭:rs(同一个连接有多个rs在每个就用完之后就立即close),stmt(同rs),conn
原因如下:
The JDBC spec requires that a Connection close any open Statement's when it is closed
JDBC规范要求关闭连接的时候同时关闭任何与其关联的打开的Statement
一般情况下关闭close都没问题
但是,如果碰到一个不负责任的数据库连接池就不好说了
连接池重写了Connection了close方法,当调用这个方法时不关闭底层连接,而是将连接放回池中。一个负责任的连接池都应该在此时将rs和stmt物理关闭,不负责任的就可能没有将rs和stmt关闭,直接将conn丢回池中,最终可能导致OutOfMemory
在dbcp中重写的close方法里就passivate这样一个方法调用,就是用来关闭rs和stmt的
原因如下:
The JDBC spec requires that a Connection close any open Statement's when it is closed
JDBC规范要求关闭连接的时候同时关闭任何与其关联的打开的Statement
一般情况下关闭close都没问题
但是,如果碰到一个不负责任的数据库连接池就不好说了
连接池重写了Connection了close方法,当调用这个方法时不关闭底层连接,而是将连接放回池中。一个负责任的连接池都应该在此时将rs和stmt物理关闭,不负责任的就可能没有将rs和stmt关闭,直接将conn丢回池中,最终可能导致OutOfMemory
在dbcp中重写的close方法里就passivate这样一个方法调用,就是用来关闭rs和stmt的
#6
四哥V5
#7
最好还是按照Result,PreparedStatement,Connection顺序进行关闭
#8
四楼说得很详细,学习了
#9
分少有人来的!
#10
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#11
按要求关闭吧,我用过 Sybase 的驱动,没自己关闭 ResultSet 和 Statement 的时候还是导致连接被用尽,可能 JDBC 2.0 和 3.0 在细节上还是有点差别,我们最好是把自己应该做的事情自己做了,而不要指望自动去做,不同的实现版本可能细节不同,依赖实现细节的代码会碰到移植性的问题,而且很难查觉错误在哪里。
#12
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#13
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭
#14
五楼的说的很明白,关闭最好按顺序来,resultset preparedstatement,connection按这个顺序关闭