结果集用作实例变量

时间:2014-02-27 10:43:17

标签: java prepared-statement resultset connector

在程序中,连接器,preparedstatement和resultset用作实例变量,并在每次使用后在下面给出的单独方法中关闭,然后通过创建新的连接器对象重新使用,并将其分配给con对于后续的电话。这样做是否安全,或者最好在方法中本地创建单独的连接器对象并在finally块中关闭它?

private void closeObjects() throws Exception{
 if(rs!=null){
 rs.close();
 rs=null;
 }
 if(preparedstmt!=null){
 preparedstmt.close();
 preparedstmt=null;
 }
 if(con!=null){
 con.close();
 con=null;
 }
}

我实际上遇到了一个问题,当我第一次运行程序时使用实例变量,它没有给出错误Result set not open但在第二次运行之后开始工作。

[不显示整个代码的道歉]

1 个答案:

答案 0 :(得分:0)

我更喜欢将JDBC实例作为执行SQL操作的方法中的局部变量。如果您忘记在某处调用closeObjects(),这种方法可以使它们的生命周期清晰,您也不必担心。如果你想避免代码重复,那么创建接受它们作为参数的方法,并从finally块中调用它。

private void closeObjects(Connection con, ResultSet rs, Statement statement) throws Exception {
    if (rs != null) {
        rs.close();
        rs=null;
    }

    if (statement != null) {
        statement.close();
        statement=null;
    }

    if (con != null) {
       con.close();
       con=null;
    }
}