Набор результатов, используемый в качестве переменной экземпляра

В программе соединитель, подготовленное состояние и набор результатов используются в качестве переменных экземпляра и закрываются каждый раз после его использования в отдельном методе, как указано ниже, а затем используются повторно, создавая новый объект соединителя, присваивая его 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 ответ

Я предпочитаю иметь экземпляры 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;
    }
}
Другие вопросы по тегам