我创建了一个测试程序,它创建了20个线程,然后这些线程将打开许多sql连接。让我们说你正在从eclipse执行这个程序,现在如果你将关闭eclipse。这会关闭所有打开的SQL连接吗?如果不是那么这些会发生什么?它会在数据库端显示100个打开的连接吗?如果是,那么在这种情况下该怎么办?
答案 0 :(得分:7)
连接不会像调用java.sql.Connection.close()
那样关闭。基本上,打开连接的JVM无法使与数据库的TCP / IP连接保持活动状态。这些将立即关闭。因此,“连接”也将被关闭。但是,数据库可能不会立即对此做出反应并使其会话保持一段时间。
在Oracle中,如果您具有足够的权限,则可以直接终止数据库中的会话。
我想,这种行为是供应商特定的和/或特定于配置的。没有一般的答案。
答案 1 :(得分:0)
我认为这取决于您使用的数据库和jdbc驱动程序。我想在大多数情况下,连接将超时并将关闭,但不会立即发生。因此,更好的方法是明确关闭连接。以下是常用技巧:
BTW我相信在你的情况下你不需要很多连接到DB。尝试重用所有100个线程中的一个。