2015-01-09 62 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