在java中关闭数据库连接后,我可以重新打开它吗?还是我需要再做DriverManager.getConnection()
一次?
5 回答
如果您调用connection.close();
了 ,则connection
(假设java.sql.Connection
类型)将变得无用。此操作释放此 Connection 对象的数据库和 JDBC 资源。
所以是的,您需要在继续之前获得新的连接
connection = DriverManager.getConnection()
我不是 100% 确定你需要打电话DriverManager.getConnection()
,但有什么害处?您已经关闭了连接,只需在需要时获取一个新连接即可。垃圾收集器会在您丢弃该连接后担心它。
是的,关闭连接后你不能做任何事情。你必须打电话getConnection
正如Javadoc提到的:
getConnection: Attempts to establish a connection to the given database URL.
因此,是的,一旦关闭先前的连接,再次调用 getConnection() 似乎是与数据库建立新连接的唯一方法。
理想情况下,我采用了稍微不同的方法并给出了不同的解决方案。
我没有打开和关闭数据库,这实际上发生在客户端的每个请求上,而是创建了一个类的单例实例并创建了一个打开的连接,只要服务器的进程还活着,它就会被重用。
简而言之:
我有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 个请求,那么每个请求都会有单独的进程,因此关闭和打开连接对我来说不是最佳解决方案。
通过这个,我有 1 个负责查询的进程。