我编写了一个连接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。
答案 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)将连接复制到另一个变量上......并且仍然保持连接。 尝试为包装器而不是方法创建一个类