用Java重新打开数据库连接

时间:2012-04-06 13:15:00

标签: java jdbc

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

5 个答案:

答案 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>

通过这个我有一个单一的过程,它是负责查询的层。