我编写了一个连接到 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/