3

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

上面的代码是关闭连接、准备好的语句和结果集的正确方法吗?

4

3 回答 3

4

从文档。

close()
Releases this Connection object's database and JDBC resources immediately instead of
waiting for them to be automatically released.
于 2013-08-19T06:27:28.450 回答
3

一个关闭连接,一个将连接引用设置为空。

如果您不关闭连接,则可能会出现连接泄漏。在 finally 块中关闭连接很重要。

close() 操作关闭连接——它不对连接引用做任何事情。您可能无法对连接执行任何操作,但它不为空。一旦它关闭,它就可以被释放回一个收集池,但这又是不同的东西了。

结论:: * connection.close() * 它关闭与数据库的连接并释放所有资源。 ***con = null***- 在这种情况下,如果连接是打开的,那么对连接对象的引用将被删除,那么它仍然是打开的,即资源不是空闲的。

如果我错了,让我纠正。

于 2013-08-19T06:36:04.773 回答
1

通过使用Connection.close()我们可以关闭资源,我们可以重用连接,因为它会返回并存储到连接池中

有意义的Connection connection = null是,我们释放了连接资源,这样内存管理就没有泄漏,但我们不能重用它。

于 2014-09-19T11:53:36.323 回答