Если Вы хотите разумно обработать недостающие параметры, можно сделать что-то как:
IF %1.==. GOTO No1
IF %2.==. GOTO No2
... do stuff...
GOTO End1
:No1
ECHO No param 1
GOTO End1
:No2
ECHO No param 2
GOTO End1
:End1
вы можете создать метод, который получает запрос SQL, и объект для обработки ResultSet
. например:
private void executeSql(String sql, ResultSetHandler handler) {
Statement stmt = null;
ResultSet rstmt = null;
try {
stmt = conn.createStatement();
rstmt = stmt.executeQuery(sql);
while (rstmt.next()) {
handler.handle(rstmt);
}
}
catch (SQLException e) {
//handle errors
}
finally {
try {rstmt.close();} catch (SQLException ex) {}
try {stmt.close();} catch (SQLException ex) {}
}
}
с ResultSetHandler
, являющимся интерфейсом:
public interface ResultSetHandler {
void handle(ResultSet rs) throws SQLException;
}
, и вы можете создать объект анонимного класса, реализующий этот интерфейс, чтобы он не загромождал слишком много.
Взгляните на SimpleJDBCTemplate в Spring Framework. Это именно то, что вам нужно.
Если вы не хотите вводить внешний фреймворк, просто используйте его как источник вдохновения для реализации своего собственного.
Вам нужна идиома «Выполнить вокруг».
Вы можете спросить «Что такое идиома« Выполнить »?» .
(И если вы как диаграммы ASCII: мой блог на тему «Факторизация обработки исключений» )
Вам следует пересмотреть использование менеджеров сохраняемости Java как iBatis и Hibernate. Это автоматизирует большую часть шаблонов. Я использовал iBatis, где все операторы SQL аккуратно упакованы и названы в файлах XML, а объем кода должен составлять около 25% от исходного подхода JDBC. Вы можете постепенно реорганизовать свою систему для использования iBatis.
Хотя он не устраняет логику установки и отключения, я часто предпочитаю этот стиль, чтобы сделать взаимодействие JDBC более приятным:
Statement statement = connection.createStatement();
try {
ResultSet results = statement.executeQuery(...);
try {
while (results.next()) {
//handle rows
}
} finally {
results.close();
}
} finally {
statement.close();
}
Путем вложения попытки
блоков, вы автоматически гарантируете, что для обоих результатов
и оператора
будут вызываться их методы close ()
, не прибегая к try
/ ] catch
в вашем блоке finally
. Кроме того, запустив блоки try
сразу после получения ваших объектов, вам не нужно беспокоиться о проверке значений null
(если, конечно, не connection.createStatement ()
или statement.executeQuery (...
) return null
- в этом случае у вас большие проблемы).