2015-01-09 80 views

回答

2

不,调用close on语句不会关闭连接。这将阻止我们在已经打开的连接上创建下一个语句,这意味着我们必须为每个语句创建新的连接(这可能是昂贵的操作)。

你可以很容易地测试它。试着在上一个关闭后创建另一个语句。

Connection con = DriverManager.getConnection(dbUrl,user,pass); 
try (Statement st = con.createStatement()) { 
    ResultSet rs = st.executeQuery(sqlQuery1); 
    simplePrint(rs); 
} catch (SQLException e) { 
    e.printStackTrace(); 
}//here `st` will be closed automatically by try-with-resources 

try (Statement st = con.createStatement()) {//lets try to create next statement 
    ResultSet rs = st.executeQuery(sqlQuery2); 
    simplePrint(rs); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

simplePrint方法可能如下:

public static void simplePrint(ResultSet rs) throws SQLException { 
    ResultSetMetaData meta = rs.getMetaData(); 
    while (rs.next()) { 
     for (int i = 1; i <= meta.getColumnCount(); i++) { 
      System.out.print(rs.getObject(i)+"\t"); 
     } 
     System.out.println(); 
    } 
} 
+0

Hmmmm,我有一些代码非常相似,你提供什么,但在第二次尝试()它声称,连接被关闭。必须是其他东西导致它... – gigosaurus 2015-01-09 23:52:37

+0

不幸的是我没有看到你的真实代码不能帮助你。另外我怀疑你在当前的问题中发布它是个好主意,因为这可能是太激进的改变。如果你想考虑用[SSCCE](http://sscce.org/)创建另一个问题并描述你正面临的问题。 – Pshemo 2015-01-09 23:58:21

相关问题