在 Java 中处理结果集的有效方法

我在Java中使用了一个ResultSet,但不知道如何正确关闭它。我正在考虑使用 ResultSet 来构造 HashMap,然后关闭 ResultSet。这种HashMap技术是否有效,或者是否有更有效的方法来处理这种情况?我同时需要键和值,因此使用HashMap似乎是一个合乎逻辑的选择。

如果使用HashMap是最有效的方法,那么我如何在代码中构造和使用HashMap?

以下是我尝试过的方法:

public HashMap resultSetToHashMap(ResultSet rs) throws SQLException {

  ResultSetMetaData md = rs.getMetaData();
  int columns = md.getColumnCount();
  HashMap row = new HashMap();
  while (rs.next()) {
     for (int i = 1; i <= columns; i++) {
       row.put(md.getColumnName(i), rs.getObject(i));
     }
  }
  return row;
}

答案 1
  1. 循环访问结果集
  2. 为每行创建一个新对象,以存储所需的字段
  3. 将此新对象添加到 ArrayList 或 Hashmap 或任何您喜欢的对象
  4. 关闭结果集、语句和数据库连接

编辑:现在您已经发布了代码,我对它进行了一些更改。

public List resultSetToArrayList(ResultSet rs) throws SQLException{
  ResultSetMetaData md = rs.getMetaData();
  int columns = md.getColumnCount();
  ArrayList list = new ArrayList(50);
  while (rs.next()){
     HashMap row = new HashMap(columns);
     for(int i=1; i<=columns; ++i){           
      row.put(md.getColumnName(i),rs.getObject(i));
     }
      list.add(row);
  }

 return list;
}

答案 2

我刚刚清理了RHT的答案以消除一些警告,并认为我会分享。Eclipse完成了大部分工作:

public List<HashMap<String,Object>> convertResultSetToList(ResultSet rs) throws SQLException {
    ResultSetMetaData md = rs.getMetaData();
    int columns = md.getColumnCount();
    List<HashMap<String,Object>> list = new ArrayList<HashMap<String,Object>>();

    while (rs.next()) {
        HashMap<String,Object> row = new HashMap<String, Object>(columns);
        for(int i=1; i<=columns; ++i) {
            row.put(md.getColumnName(i),rs.getObject(i));
        }
        list.add(row);
    }

    return list;
}