java - MySQL 连接在 close() 之后仍然存在,带有一个薄包装器

标签 java mysql

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

    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。

最佳答案

你能试一下这段代码吗……看看错误输出是什么……

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());
}

关于java - MySQL 连接在 close() 之后仍然存在,带有一个薄包装器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9461868/

相关文章:

mysql - PhPmyadmin MySQL 错误 #1018 Xampp

java - 不区分大小写的字符串作为 HashMap 键

java - 在 iText 中,如何设置右列表格单元格的行距?

blackberry - 黑莓市场的目标 JRE

java - 在 Intellij IDEA 中设置 Maven POM 以编译混合 Java/Groovy 代码的正确方法

Java + JPA : Search User in Database By first and last name return too many results. 有更好的方法吗?

mysql - mySQL中如何显示最高分

java - 错误 : Client does not support authentication protocol requested by server; consider upgrading MySQL client

mysql - 如何防止mysql创建mysql-bin.00000 x文件?

java - Android ormlite 查询按另一个表排序