Мне любопытно узнать о лучших практиках, когда дело доходит до взаимодействия с базой данных. Я использую шаблон, который, как я полагаю, обрабатывает, чтобы все соответствующие объекты были закрыты, когда я закончил с ними. Тем не менее, коллега недавно реорганизовал мой код с комментарием в соответствии с «тем, что мы всегда закрываем объекты базы данных». Мне нужно знать, если по какой-то причине один образец «лучше», чем другой. Является ли шаблон каким-то образом неправильным? Имеет ли один образец преимущества над другими?Каков предпочтительный метод обеспечения закрытия объектов базы данных?
Узор, который я следующее:
public void doStuff() {
try {
final Connection connection = this.getConnection();
try {
final PreparedStatement ps = connection.prepareStatement("SELECT COLA, COLB FROM TBL WHERE COLC = ?");
try {
ps.setString(1, "asdf");
final ResultSet rs = ps.executeQuery();
try {
// get data from rs
} finally {
rs.close();
}
} finally {
ps.close();
}
} finally {
connection.close();
}
} catch (SQLException e) {
// do something with the error
}
}
Узор, что мой коллега доработан мой код:
public void doStuff() {
Connection connection = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
connection = this.getConnection();
ps = connection.prepareStatement("SELECT COLA, COLB FROM TBL WHERE COLC = ?");
ps.setString(1, "asdf");
rs = ps.executeQuery();
// get data from rs
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
// do something with the error
}
}
if (ps!= null) {
try {
ps.close();
} catch (SQLException e) {
// do something with the error
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
// do something with the error
}
}
}
}
Вы правы на поиск снова, ваш путь также закрывает все. Я отозвал свой ответ :). Тем не менее, оба они уродливые.Если у вас есть java7, чем try -with-resources - это значительное улучшение! –
@RobertMoskal не может спорить там! =) – GamerJosh