我有太多重复做类似方法的方法
Statement stmt = null;
ResultSet rstmt = null;
try {
stmt = conn.createStatement();
rstmt = stmt.executeQuery(...);
while (rstmt.next()) {
//handle rows
}
} catch (SQLException e) {
//handle errors
} finally {
try {rstmt.close();} catch (SQLException ex) {}
try {stmt.close();} catch (SQLException ex) {}
}
语句和结果集的设置/删除/清除是重复的,并隐藏了有趣的代码段。
是否有任何模式或习惯用法来处理此问题(不引入任何外部框架)?
最佳答案
您可以创建一个接收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
为接口(interface):public interface ResultSetHandler {
void handle(ResultSet rs) throws SQLException;
}
并且您可以创建实现该接口(interface)的匿名类的对象,因此不会太困惑。