2

在这段代码中,连接会被关闭吗?

Connection con = DriverManager.getConnection(dbUrl, user, pass);
try (Statement st = con.createStatement()) {
    ResultSet rs = st.executeQuery(query);
}

我的代码中的某些内容意外关闭了连接,我想确保它不是这个。

4

1 回答 1

3

不,在 Statement 上调用close不会关闭 Connection。这将阻止我们在已打开的连接上创建下一个语句,这意味着我们必须为每个语句创建新的连接(这可能是昂贵的操作)。

你可以很容易地测试它。只需在前一个语句关闭后尝试创建另一个语句。

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();
    }
}
于 2015-01-09T23:39:45.433 回答