我有一个小项目,我需要将我的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是否正确关闭?
1条答案
按热度按时间mcvgt66p1#
是的,正确
是的,您已经正确地使用了try-with-resources语法来适当地关闭JDBC资源。
你说:
连接和reslutset都需要关闭
是的。
Connection
和ResultSet
类都有一个释放资源的close
方法,所以你应该尽早关闭它们。AutoCloseable
,因此可以使用try-with-resources语法。对于
java.sql.Statement
也是如此。相反,看看
ResultSetMetaData
类,该类没有close
方法,也没有实现AutoCloseable
,所以该类不像常规的ResultSet
,不需要关闭,也不能用在try-with-resources语法中。一米九
你说:
但在第二种情况下,executeUpdate不能放在()中。
executeUpdate
方法不返回AutoCloseable
对象。因此不能使用try-with-resources语法调用该方法。方法
executeUpdate
返回一个原语int
,而不是一个对象的引用,所以没有close
方法可调用。