【发布时间】:2015-03-21 04:01:39
【问题描述】:
如果我在我的 java 程序中创建一个 MySQL 连接,并且程序从 main 方法中退出,这个 MySQL 连接会发生什么?
public static void main(String args[])
{
Connection conn = getConnection(...);
return;
}
这个连接会自动关闭吗?
或者连接在超时之前是否保持活动状态?
【问题讨论】:
如果我在我的 java 程序中创建一个 MySQL 连接,并且程序从 main 方法中退出,这个 MySQL 连接会发生什么?
public static void main(String args[])
{
Connection conn = getConnection(...);
return;
}
这个连接会自动关闭吗?
或者连接在超时之前是否保持活动状态?
【问题讨论】:
当进程退出时,操作系统将关闭或重置进程的所有打开的 TCP 连接,具体取决于平台。在任何一种情况下,数据库服务器都会立即通知。没有超时。
【讨论】:
不,那是资源泄漏。 Connection 对象将不复存在,因为 JVM 只是在您的 main() 结束时终止,但在数据库服务器上分配的资源会保持打开一段时间,直到数据库决定在 超时后回收它们 em>。
这是一种非常糟糕的做法,因为如果程序在没有明确关闭其数据库Connection 的情况下终止,那么之前完成的所有数据库操作(如插入、更新等)会发生什么情况未定义 .有些 JDBC 驱动程序会提交您的更改,有些会执行隐式回滚。
强烈建议不要依赖这种 undefined 特定于数据库的行为,因为这样您就放弃了使用与数据库无关的 JDBC API 的好处,并损害您的应用程序的可移植性而没有任何回报。
【讨论】: