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

时间:2010-12-23 06:34:04

标签: java jvm database-connection

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

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:0)

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

  1. 在包装数据库连接会话的finally块中执行此操作。
  2. 以防万一写出finalize()方法并关闭连接。当出现问题时,它将有助于关闭连接,并且在连接关闭之前,连接到DB的对象将被垃圾收集。
  3. 您可以创建在进程停止时由JVM自动调用的关闭挂钩。在大多数情况下,当您从外部杀死JVM(unix中的kill -9除外)时,这会有所帮助
  4. BTW我相信在你的情况下你不需要很多连接到DB。尝试重用所有100个线程中的一个。