有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否在语句上尝试使用WithResources关闭连接?

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

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

我的代码中有东西意外地关闭了连接,我想确定不是这样


共 (1) 个答案

  1. # 1 楼答案

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

    你可以很容易地测试它。在上一条语句关闭后,尝试创建另一条语句

    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();
        }
    }