【发布时间】:2012-02-27 08:16:48
【问题描述】:
我写了一个Java程序,连接到MySQL数据库,立即关闭,然后休眠一段时间终止。
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。
【问题讨论】:
-
您尚未创建包装器。您已经创建了一个方法,您可以调用该方法来获得连接(这样做时忽略了遵守 Java 命名约定)。两个代码 sn-ps 是严格等价的。您的诊断可能有误。
-
您实际上并没有直接调用方法
CreateConnection(ConnectionType, String)。也许你在CreateConnection(String)方法中做了一些不同的事情? -
我相信两者是等价的,但有不同的行为。我很困惑。
-
CreateConnection(String) 是正确的。我解决了这个问题。谢谢。