程序退出时,MySQL Connections会自动关闭吗?

时间:2015-03-21 04:01:40

标签: java mysql database

如果我在我的java程序中创建一个MySQL连接,并且该程序退出main方法,那么这个MySQL连接会发生什么?

public static void main(String args[])
{
    Connection conn = getConnection(...);

    return;    
}

此连接是否自动关闭?

或者连接是否会一直存在,直到它超时?

2 个答案:

答案 0 :(得分:0)

不,那就是资源泄漏。 Connection对象将不再存在,因为JVM只在您的main()结束时终止,但在数据库服务器上分配的资源将保持打开状态一段时间,直到数据库决定在超时

这是一种非常糟糕的做法,因为如果程序在没有显式关闭其数据库Connection的情况下终止,那么之前完成的所有数据库操作(如插入,更新等)会发生什么? undefined 。一些JDBC驱动程序会 提交 您的更改,而有些则会执行隐式 回滚

强烈建议不要依赖此类 undefined 数据库特定的行为,因为这样您就会放弃使用数据库无关的JDBC API并损害应用程序的可移植性的好处没有回报。

答案 1 :(得分:0)

操作系统将在进程退出时关闭或重置进程的所有打开的TCP连接,具体取决于平台。无论哪种情况,数据库服务器都会立即注意到没有超时。