为了账号安全,请及时绑定邮箱和手机立即绑定

用Java关闭数据库连接

用Java关闭数据库连接

RISEBY 2019-07-10 14:39:36
用Java关闭数据库连接我有点糊涂了,我正在读下面的文章http:/en.wikipara.org/wiki/java_Database_ConnectivityConnection conn = DriverManager.getConnection(      "jdbc:somejdbcvendor:other data needed by some jdbc vendor",      "myLogin",      "myPassword" );Statement stmt = conn.createStatement();try {     stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );} finally {     //It's important to close the statement when you are done with it     stmt.close();}不需要关闭Conn连接吗?如果连接()没有发生,到底会发生什么呢?我有一个私人网络应用程序,我认为它目前没有关闭任何一种形式,但重要的是真正的一个,康涅狄格,还是两者兼而有之?该网站一直断断续续地关闭,但服务器一直说这是一个数据库连接问题,我怀疑它没有被关闭,但我不知道谁关闭,如果有的话。
查看完整描述

3 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

当你用完你的Connection,您需要显式地关闭它,方法是调用它的close()方法以释放任何其他数据库资源(游标、句柄等)。

实际上,Java中的安全模式是关闭ResultSetStatement,和Connection(按该顺序)finally当你和他们在一起的时候阻止他们,就像这样:

Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {
    // Do stuff
    ...} catch (SQLException ex) {
    // Exception handling stuff
    ...} finally {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) { /* ignored */}
    }
    if (ps != null) {
        try {
            ps.close();
        } catch (SQLException e) { /* ignored */}
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (SQLException e) { /* ignored */}
    }}

这个finally块可以稍微改进为(以避免空检查):

} finally {
    try { rs.close(); } catch (Exception e) { /* ignored */ }
    try { ps.close(); } catch (Exception e) { /* ignored */ }
    try { conn.close(); } catch (Exception e) { /* ignored */ }}

但是,这仍然非常冗长,因此您通常会使用帮助类来关闭空安全助手方法中的对象,而finally区块变成了这样的东西:

} finally {
    DbUtils.closeQuietly(rs);
    DbUtils.closeQuietly(ps);
    DbUtils.closeQuietly(conn);}

实际上,ApacheCommonsDbUtils有一个DbUtils类,因此不需要编写自己的类。


查看完整回答
反对 回复 2019-07-10
?
千万里不及你

TA贡献1784条经验 获得超9个赞

仅仅关闭就足够了StatementConnection..不需要显式关闭ResultSet对象。

Java文档说java.sql.ResultSet:

当语句对象关闭、重新执行或用于从多个结果序列检索下一个结果时,生成该语句对象的语句对象将自动关闭ResultSet对象。


谢谢BalusC的评论:“我不相信这一点。有些JDBC驱动程序在这方面失败了。”


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 967 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信