我有太多重复做类似方法的方法

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)的匿名类的对象,因此不会太困惑。

10-04 10:01