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