Java 如果我们关闭JVM,sql连接会自动关闭吗?

Java 如果我们关闭JVM,sql连接会自动关闭吗?,java,jvm,database-connection,Java,Jvm,Database Connection,我创建了一个测试程序,它创建了20个线程,然后这些线程将打开许多sql连接。假设您正在从eclipse执行此程序,现在是否要关闭eclipse。这会关闭所有打开的sql连接吗?如果没有,那么这些将发生什么?它会在数据库端显示100个打开的连接吗?如果是,那么在这种情况下该怎么办?我认为这取决于您使用的数据库和jdbc驱动程序。我猜在大多数情况下,连接会超时并关闭,但不会立即发生。所以,更好的方法是显式关闭连接。以下是常用的技巧: 在包装db连接会话的finally块中执行此操作 以防write

我创建了一个测试程序,它创建了20个线程,然后这些线程将打开许多sql连接。假设您正在从eclipse执行此程序,现在是否要关闭eclipse。这会关闭所有打开的sql连接吗?如果没有,那么这些将发生什么?它会在数据库端显示100个打开的连接吗?如果是,那么在这种情况下该怎么办?

我认为这取决于您使用的数据库和jdbc驱动程序。我猜在大多数情况下,连接会超时并关闭,但不会立即发生。所以,更好的方法是显式关闭连接。以下是常用的技巧:

  • 在包装db连接会话的finally块中执行此操作
  • 以防write finalize()方法并关闭那里的连接。当出现问题并且连接到DB的对象将在连接关闭之前被垃圾收集时,关闭连接将有所帮助
  • 您可以创建关闭钩子,当进程停止时JVM会自动调用该钩子。在大多数情况下,当您从外部杀死JVM时,这会有所帮助(unix中的kill-9除外)

  • 顺便说一句,我相信在你的情况下,你不需要很多连接到数据库。尝试重用100个线程中的一个

    连接不会像调用
    java.sql.Connection.close()
    那样关闭。基本上,打开连接的JVM无法保持到数据库的TCP/IP连接处于活动状态。这些将立即关闭。因此,“连接”也将被关闭。但是,数据库可能不会立即对此做出反应,并使其会话保持活动状态一段时间

    在Oracle中,如果您有足够的权限,可以直接终止数据库中的会话


    我想,这种行为是特定于供应商和/或特定于配置的。没有一般的答案。

    我认为在数据库方面,他们会超时。大多数数据库都有默认连接超时。当进程退出时,内核将关闭所有TCP连接-1.这只是一个创建多个连接的测试,所有连接都执行相同的查询:)我正在使用DB2,但无论如何,您已经回答了我的问题。;)是的,我觉得听起来很熟悉。我一直在这样做,即使只有一个连接,当那该死的东西挂起时;-)如果数据库服务器没有立即注意到关闭或重置,则其编码存在严重错误。它不必等待超时。