使用瘦包装器在close()之后保持MySQL连接

时间:2012-02-27 08:16:49

标签: java mysql

我编写了一个连接MySQL数据库的Java程序,立即关闭,然后暂停一段时间终止。

    Connection conn = DriverManager.getConnection(conn_str);
    conn.close();
    Thread.sleep(30 * 1000);

上面的代码工作得很好。 conn 将在调用close()后立即关闭,并且在sleep()期间不会出现任何连接。

之后,我写了一个瘦连接包装器:

    public static Connection CreateConnection(String _connectionStr) throws SQLException {
        Connection c = null;
        c = DriverManager.getConnection(_connectionStr);
        return c;
    }

修改后的代码是:

    Connection conn = ConnectionWrapper.CreateConnection(conn_str);
    conn.close();
    Thread.sleep(30 * 1000);

我希望这两者没有区别,但是对于后一种情况,在程序终止之前(此处为30秒),连接一直保持未闭合状态。这在前一段代码中不会发生。

我使用mysqladmin extend-status | grep connected检查了行为,查看Threads_connected的值。

我想使用后一个包装器进行代码抽象。如果您对强行关闭连接的行为或解决方法有任何疑问,请告诉我。

谢谢,

-

编辑:修复了“包装”代码。这是我的错误。

已编辑:mysqladmin的连接数默认为1(诊断一个)。后一个代码运行时,该数字变为2,而前者代码为2。

3 个答案:

答案 0 :(得分:0)

你可以试试这个代码......看看错误输出会是什么......

try{
 con.close();
  if (con.isClosed()) 
    System.out.println("Connection closed.");
} catch (java.lang.ClassNotFoundException e) {
  System.err.println("ClassNotFoundException: " +e.getMessage());
} catch (SQLException e) {
  System.err.println("SQLException: " +e.getMessage());
}

答案 1 :(得分:0)

我认为这是连接池(为重新连接节省时间的想法......)

查看这篇文章:

http://dev.mysql.com/tech-resources/articles/connection_pooling_with_connectorj.html

答案 2 :(得分:-2)

好的,抱歉看到你的代码麻木......你可以看到...... 你在一个方法中创建了一个连接 ......所以这意味着当你离开时方法...您将无法关闭该连接(变量c),因为您刚刚使用return(这是您的变量conn)将连接复制到另一个变量上......并且仍然保持连接。 尝试为包装器而不是方法创建一个类