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