Jdbc 关闭Oracle连接?
我们总是听说,一旦完成交易,就应该关闭连接。我这里的问题是:即使我们不关闭连接,一旦我们离开了创建连接的方法,垃圾收集器也会回收内存。那么,即使我们不关闭连接,实际的问题是什么呢?不,GC在这方面帮不了你,因为它与内存无关 连接是数据库服务器上的稀缺资源,而不是应用程序客户端中的稀缺资源。如果您清理内存而不告诉服务器这样做,您将泄漏可能无法回收的连接。最终你会用完的 与ResultSet相同-它是一个光标 您必须始终关闭各个finally块中的所有SQL资源(连接、语句和结果集),并以与获取相反的顺序包装在try/catch块中Jdbc 关闭Oracle连接?,jdbc,Jdbc,我们总是听说,一旦完成交易,就应该关闭连接。我这里的问题是:即使我们不关闭连接,一旦我们离开了创建连接的方法,垃圾收集器也会回收内存。那么,即使我们不关闭连接,实际的问题是什么呢?不,GC在这方面帮不了你,因为它与内存无关 连接是数据库服务器上的稀缺资源,而不是应用程序客户端中的稀缺资源。如果您清理内存而不告诉服务器这样做,您将泄漏可能无法回收的连接。最终你会用完的 与ResultSet相同-它是一个光标 您必须始终关闭各个finally块中的所有SQL资源(连接、语句和结果集),并以与获取相反
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。正如我们所说,连接是稀缺资源。数据库连接有什么特别之处,我们称之为稀缺和昂贵?只是为了更好地理解它,正如你所说的“最终你会用完的。”数据库服务器上的连接有最大限制吗?即使我们不关闭其中的一些连接,我们也不能为每个请求获取连接吗?数据库服务器只留出了这么多;这就是它们稀缺的原因。(在我使用的任何一台计算机上,没有什么是无限的。)不,一旦用完了,就是这样。