java 在处理数据库时,试用资源应该包含哪些内容

piv4azn7  于 2023-01-07  发布在  Java
关注(0)|答案(1)|浏览(85)

我有一个小项目,我需要将我的Java应用程序连接到数据库。我已经成功了。我有一些问题。我不知道如何处理资源。到目前为止,我默认打包尽可能多的资源到try-wtith-resources中,因为它是自动关闭资源的可靠选项。但我不能100%确定我是否做对了。
有2种情况:
1.我使用函数ResultSet executeQuery(String sql)

try 
(
    Connection connection = DriverManager.getConnection(url, user, password);
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(query)
) 
{
    ResultSetMetaData rsmd = resultSet.getMetaData();
    int columnsNumber = rsmd.getColumnCount();
    String number = new String();

    while (resultSet.next()) {
        for (int i = 1; i <= columnsNumber; i++) {
            number = resultSet.getString(i);
        }
    }
    retValue = Integer.parseInt(number);
    …
}

1.我使用函数int executeUpdate(String sql)

try 
(
    Connection connection = DriverManager.getConnection(url, user, password);
    Statement statement = connection.createStatement()
) 
{
    statement.executeUpdate(query);
    …
}

据我所知,connection和reslutset都需要关闭。在第一种情况下,我稍后使用resultset,所以我在try的()中创建了一个变量。但在第二种情况下,executeUpdate不能放在()中。我知道它返回int,但我仍然不确定。这是否足够?connection和resultset是否正确关闭?

mcvgt66p

mcvgt66p1#

是的,正确

是的,您已经正确地使用了try-with-resources语法来适当地关闭JDBC资源。
你说:
连接和reslutset都需要关闭
是的。

  • ConnectionResultSet类都有一个释放资源的close方法,所以你应该尽早关闭它们。
  • 这两个类都被记录为实现AutoCloseable,因此可以使用try-with-resources语法。

对于java.sql.Statement也是如此。
相反,看看ResultSetMetaData类,该类没有close方法,也没有实现AutoCloseable,所以该类不像常规的ResultSet,不需要关闭,也不能用在try-with-resources语法中。

一米九

你说:
但在第二种情况下,executeUpdate不能放在()中。
executeUpdate方法不返回AutoCloseable对象。因此不能使用try-with-resources语法调用该方法。
方法executeUpdate返回一个原语int,而不是一个对象的引用,所以没有close方法可调用。

相关问题