Jdbc 关闭Oracle连接?

Jdbc 关闭Oracle连接?,jdbc,Jdbc,我们总是听说,一旦完成交易,就应该关闭连接。我这里的问题是:即使我们不关闭连接,一旦我们离开了创建连接的方法,垃圾收集器也会回收内存。那么,即使我们不关闭连接,实际的问题是什么呢?不,GC在这方面帮不了你,因为它与内存无关 连接是数据库服务器上的稀缺资源,而不是应用程序客户端中的稀缺资源。如果您清理内存而不告诉服务器这样做,您将泄漏可能无法回收的连接。最终你会用完的 与ResultSet相同-它是一个光标 您必须始终关闭各个finally块中的所有SQL资源(连接、语句和结果集),并以与获取相反

我们总是听说,一旦完成交易,就应该关闭连接。我这里的问题是:即使我们不关闭连接,一旦我们离开了创建连接的方法,垃圾收集器也会回收内存。那么,即使我们不关闭连接,实际的问题是什么呢?

不,GC在这方面帮不了你,因为它与内存无关

连接是数据库服务器上的稀缺资源,而不是应用程序客户端中的稀缺资源。如果您清理内存而不告诉服务器这样做,您将泄漏可能无法回收的连接。最终你会用完的

与ResultSet相同-它是一个光标

您必须始终关闭各个finally块中的所有SQL资源(连接、语句和结果集),并以与获取相反的顺序包装在try/catch块中

public class JdbcTemplate {

    public Object exampleSqlOperation(Connection c) throws SQLException {
        Object results = null;

        Statement st = null;
        ResultSet rs = null;

        try {
           // SQL stuff here
           // Load into results Object - data structure
        } catch (SQLException e) {
           e.printStackTrace(); // Better to log it.
        } finally {
            DatabaseUtils.close(rs);  
            DatabaseUtils.close(st);
        }

        return results;
    }
}

public class DatabaseUtils {
    public static void close(Connection c) {
        try {
            if (c != null) c.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // Same for Statement, ResultSet
}

谢谢duffymo。正如我们所说,连接是稀缺资源。数据库连接有什么特别之处,我们称之为稀缺和昂贵?只是为了更好地理解它,正如你所说的“最终你会用完的。”数据库服务器上的连接有最大限制吗?即使我们不关闭其中的一些连接,我们也不能为每个请求获取连接吗?数据库服务器只留出了这么多;这就是它们稀缺的原因。(在我使用的任何一台计算机上,没有什么是无限的。)不,一旦用完了,就是这样。