Создайте метод, который принимает интерфейс и завершает обработку исключений.
Каждая анонимная (или нет) реализация каждого интерфейса содержит вызов SQL, его параметры и т. Д.
Например (очень грубо):
public void addCourseToCourses(final String values) {
handleSql(new SqlCommand() {
@Override public void run(Statement stmt) {
stmt.executeUpdate("insert into courses values " + values);
}
});
}
handleSql
- это статический импорт чего-то похожего:
public class SqlWrapper {
public static void handleSql(SqlCommand cmd) {
Connection conn = // get connection;
try {
conn.setAutoCommit(false);
} catch (SQLException e) {
LOG.log(Level.SEVERE, null, e);
return;
}
try {
cmd.run();
conn.commit();
} catch (SQLException e) {
cleanRollback();
} finally {
cleanClose();
}
}
}
Могут быть добавлены различные крючки, которые кажутся разумными.Универсальная версия допускает различные типы возвращаемых данных, что, вероятно, более уместно, зависит только от того, что вам действительно нужно.
В комментарии упоминаются Runnable
и Callable
, IMO Runnable
специально для потоков (и базовый интерфейс не является универсальным).Callable
- лучший выбор, но я ожидаю, что будет добавлено достаточно других хуков для обработки специфичных для SQL / JDBC функций, которые я бы использовал для чего-то специфичного для приложения.YMMV.
Эта модель была заново изобретена повсюду;может иметь смысл взять что-то вроде Spring JDBC и просто использовать его.