connection.close()和connection = null之间的区别

时间:2013-08-19 06:22:43

标签: jdbc

如果我通过在连接对象上调用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());
        }
    }

上面的代码是关闭连接,预处理语句和结果集的正确方法吗?

3 个答案:

答案 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感觉我们释放了连接资源,这样内存管理就没有泄漏,但是我们无法重用它。