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