Java 是否尝试在语句上使用资源关闭连接?
在这个代码中,连接会被关闭吗Java 是否尝试在语句上使用资源关闭连接?,java,try-with-resources,Java,Try With Resources,在这个代码中,连接会被关闭吗 Connection con = DriverManager.getConnection(dbUrl, user, pass); try (Statement st = con.createStatement()) { ResultSet rs = st.executeQuery(query); } 我的代码中有东西意外地关闭了连接,我想确定它不是这样。否,调用closeon语句将不会关闭连接。这将阻止我们在已经打开的连接上创建下一个语句,这意味着我们必须
Connection con = DriverManager.getConnection(dbUrl, user, pass);
try (Statement st = con.createStatement()) {
ResultSet rs = st.executeQuery(query);
}
我的代码中有东西意外地关闭了连接,我想确定它不是这样。否,调用
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();
}
}
publicstaticvoidsimpleprint(ResultSet-rs)抛出SQLException{
ResultSetMetaData meta=rs.getMetaData();
while(rs.next()){
对于(int i=1;i