我有太多的方法重复做类似这样的事情
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) {}
}语句和结果集的这种设置/销毁/清理是重复的,并且隐藏了有趣的代码片段。
有没有什么模式或习惯用法来处理这个问题(不引入任何外部框架)?
发布于 2009-07-19 23:37:22
您可以创建一个接收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;
}您可以创建一个实现该接口的匿名类的对象,这样它就不会太混乱了。
发布于 2009-07-19 22:40:08
看看Spring Framework中的SimpleJDBCTemplate。这就是你想要的。
如果你不想引入一个外部框架,那么就用它来激发实现你自己的灵感吧。
发布于 2009-07-19 22:33:35
你想要的是Execute Around习惯用法。
https://stackoverflow.com/questions/1151050
复制相似问题