使用 try-with-resources java 关闭数据库连接

Posted

技术标签:

【中文标题】使用 try-with-resources java 关闭数据库连接【英文标题】:Closing DB connection with try-with-resources java 【发布时间】:2020-06-17 19:57:37 【问题描述】:

我的数据库有原始的 get 方法。我需要通过它的 id 获取课程,然后关闭连接和语句。

public Course get(int id) throws ClassNotFoundException, SQLException 
        try (Connection connection = ConnectionConfig.getDbConnection();
             PreparedStatement statement = connection.prepareStatement(GET_COURSE))
            statement.setInt(1, id);
            ResultSet course = statement.executeQuery();
            course.next();
            String result = course.getString(1);
            return new Course(id, result);
        
    

我想用 try-with-resources 来做。它会在此代码中工作还是由于块中的 return 语句而无法自动关闭?另一方面,我不想在这个块之外使用 return 因为方法可以返回带有空字段的对象。在这种情况下,哪种方法形式是最有效和最易读的?提前谢谢你,我明白这是一个相当业余的问题)

【问题讨论】:

连接将被关闭 【参考方案1】:

关闭连接的代码通常写在 finally 块中

Connection connection = null;
try 
connection = ConnectionConfig.getDbConnection();
//do all the stuff


finally
connection.close()

【讨论】:

【参考方案2】:

连接将被 try with resources 块关闭。条件是给定的类实现 AutoCloseable。情况已经如此。

可以看到here

【讨论】:

以上是关于使用 try-with-resources java 关闭数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

在 Netbeans 中使用 try-with-resources

使用try-with-resource优雅关闭资源

为啥 try-with-resources 不能与字段变量一起使用?

使用 try-with-resources 重写此代码

如果我们使用 try-with-resource 是不是需要关闭资源

在 JDK 9 中更简洁使用 try-with-resources 语句