在java中关闭数据库连接后,我可以重新打开它吗?或者我是否需要再次DriverManager.getConnection()
?
答案 0 :(得分:7)
如果您拨打了connection.close();
,则connection
(假设为java.sql.Connection
类型)变得毫无用处。此操作释放此Connection对象的数据库和JDBC资源。
所以是您需要在可以继续之前获得新的连接
connection = DriverManager.getConnection()
答案 1 :(得分:4)
我不是100%确定您需要来致电DriverManager.getConnection()
,但有什么危害?您已经关闭了连接,只需在需要时获取新连接即可。丢弃垃圾收集器后,垃圾收集器会担心这种关闭连接。
答案 2 :(得分:1)
getConnection
答案 3 :(得分:0)
如Javadoc所述:
getConnection: Attempts to establish a connection to the given database URL.
因此,是的,再次调用getConnection()看起来是关闭先前连接后与数据库建立新连接的唯一方法。
答案 4 :(得分:0)
理想情况下,我采用了稍微不同的方法并给出了不同的解决方案。
我没有打开和关闭客户端的每个请求上真正发生的数据库,而是创建了一个类的单例实例并建立了单个打开连接,只要服务器的进程处于活动状态,它就会被重用。 / p>
简而言之:
我在getConnection()
类
Database
public Connection getConnection() throws Exception {
try {
String connectionURL = "jdbc:mysql://localhost:3306/someDatabase";
Class.forName("com.mysql.jdbc.Driver").newInstance();
if (connection == null) {
connection = DriverManager.getConnection(connectionURL, "someUser", LOCAL_MYSQL_PASSWORD);
}
return connection;
} catch (Exception e) {
}
}
Database
类是单例,因此重用相同的类并重用相同的连接。
我已经通过show processList
测试了这个,并且这个给了大约100个连接如果我不关闭连接,即使我关闭连接,实际过程也不会被杀死,但是进入睡眠状态,因此只要同一个客户端要求相同的请求就会使用它,但是如果你有15个请求,那么每个请求都有不同的进程,因此关闭和打开连接对我来说不是最佳解决方案。 / p>
通过这个我有一个单一的过程,它是负责查询的层。