1
在這段代碼中,連接是否會關閉?Try-with-resources關閉以前打開的連接?
Connection con = DriverManager.getConnection(...);
try (Statement st = con.createStatement()) {
ResultSet rs = st.executeQuery(...);
...
}
在這段代碼中,連接是否會關閉?Try-with-resources關閉以前打開的連接?
Connection con = DriverManager.getConnection(...);
try (Statement st = con.createStatement()) {
ResultSet rs = st.executeQuery(...);
...
}
不,調用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();
}
}
Hmmmm,我有一些代碼非常相似,你提供什麼,但在第二次嘗試()它聲稱,連接被關閉。必須是其他東西導致它... – gigosaurus 2015-01-09 23:52:37
不幸的是我沒有看到你的真實代碼不能幫助你。另外我懷疑你在當前的問題中發佈它是個好主意,因爲這可能是太激進的改變。如果你想考慮用[SSCCE](http://sscce.org/)創建另一個問題並描述你正面臨的問題。 – Pshemo 2015-01-09 23:58:21