如果我通过在连接对象上调用close()显式关闭连接,我将连接对象设置为null。连接对象的close()和null有什么区别? 如果我关闭连接,仍然在连接池中维护连接对象? 例如。
Connection dbConnection=null;
PreparedStatement preparedStatement = null;
ResultSet rs;
try {
Connection dbConnection= DriverManager.getConnection("jdbc:hsqldb:file:test5","sa", "");
...........
...........
dbConnection.close();
dbConnection=null;
} catch (Exception e) {
LOGGER.error("Exception Occured while fetching All record:Item details start method "
+ e.getMessage());
} finally {
try
{
if (rs!=null)
{
rs.close();
rs=null;
}
}
catch(SQLException e)
{
LOGGER.error(RESULTSETCLOSEEXCEPTION
+ e.getMessage());
}
try {
if (preparedStatement != null) {
preparedStatement.close();
preparedStatement=null;
}
} catch (SQLException e) {
LOGGER.error(STATEMENTCLOSEEXCEPTION
+ e.getMessage());
}
try {
if (dbConnection != null) {
dbConnection.close();
dbConnection=null;
}
} catch (SQLException e) {
LOGGER.error(CONNECTIONCLOSEEXCEPTION
+ e.getMessage());
}
}
上面的代码是关闭连接,预处理语句和结果集的正确方法吗?
答案 0 :(得分:4)
来自文档。
close()
Releases this Connection object's database and JDBC resources immediately instead of
waiting for them to be automatically released.
答案 1 :(得分:2)
一个关闭连接,一个将连接引用设置为null。
如果不关闭连接,可能会发生连接泄漏。在finally块中关闭连接非常重要。
close()操作会关闭连接 - 它不会任何连接参考。您可能无法执行任何连接,但它不是null。一旦它关闭,它就可以被释放回收集池,但这又是一个不同的东西。
<强>结论:: 强>
* connection.close()时 *
它关闭与数据库的连接并释放所有资源。
***con = null***
- 在这种情况下删除对连接对象的引用,如果连接已打开,则它仍处于打开状态,即资源不可用。
如果我出错了,请纠正。
答案 2 :(得分:1)
使用Connection.close()
我们可以关闭资源,我们可以重用连接,因为它会返回并存储到连接池中
和
通过使Connection connection = null
感觉我们释放了连接资源,这样内存管理就没有泄漏,但是我们无法重用它。