12

在java中关闭数据库连接后,我可以重新打开它吗?还是我需要再做DriverManager.getConnection()一次?

4

5 回答 5

9

如果您调用connection.close();了 ,则connection(假设java.sql.Connection类型)将变得无用。此操作释放此 Connection 对象的数据库和 JDBC 资源。

所以的,您需要在继续之前获得新的连接

connection = DriverManager.getConnection()
于 2012-04-06T13:25:04.047 回答
5

我不是 100% 确定你需要打电话DriverManager.getConnection(),但有什么害处?您已经关闭了连接,只需在需要时获取一个新连接即可。垃圾收集器会在您丢弃该连接后担心它。

于 2012-04-06T13:18:19.230 回答
1

是的,关闭连接后你不能做任何事情。你必须打电话getConnection

于 2012-04-06T13:19:48.937 回答
0

正如Javadoc提到的:

getConnection: Attempts to establish a connection to the given database URL.

因此,是的,一旦关闭先前的连接,再次调用 getConnection() 似乎是与数据库建立新连接的唯一方法。

于 2012-04-06T13:24:55.073 回答
0

理想情况下,我采用了稍微不同的方法并给出了不同的解决方案。

我没有打开和关闭数据库,这实际上发生在客户端的每个请求上,而是创建了一个类的单例实例并创建了一个打开的连接,只要服务器的进程还活着,它就会被重用。

简而言之:

我有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 个负责查询的进程。

于 2018-02-07T12:47:00.367 回答