【发布时间】:2013-07-05 22:49:27
【问题描述】:
如果我有以下代码,这是否是关闭 Connection、ResultSet 和 Statement 对象的正确方法?我觉得所有对close() 的调用都应该在finally 块中。
Connection con = null;
ResultSet rs = null;
Statement stmt = null;
try{
//Code before the while loop
con = DriveManager.getConnection("Stuff");
while(someBoolean){
stmt = con.createStatement();
rs = stmt.executeQuery("SQL query");
// do stuff with query results.
if( rs != null){
rs.close();
}
if( stmt != null){
stmt.close();
}
} //end while
if( con != null ){
con.close();
}
catch (Exception e){
//handle exception
}
【问题讨论】:
-
我认为您不需要在循环中创建连接和语句。如果您使用的是 Java 7,请使用 try-with-resource,否则,将所有资源关闭的东西移动到 finally 块。
-
我在连接上犯了一个错误,我实际上是在循环之外创建它。但你认为我也应该在外面创建声明吗?
-
"默认情况下,每个 Statement 对象只能同时打开一个 ResultSet 对象",除非您使用多个 ResultSet,否则我认为一个 Statement 就可以(这是我的理论,但我建议你进行一些测试)。