在Java中处理ResultSet的有效方法

我在Java中使用ResultSet,并不知道如何正确closures它。 我正在考虑使用ResultSet构造一个HashMap,然后closuresResultSet。 这个HashMap技术是否有效,还是有更有效的方法来处理这种情况? 我需要键和值,所以使用HashMap似乎是一个合理的select。

如果使用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. 遍历ResultSet
  2. 为每一行创build一个新的对象,来存储你需要的字段
  3. 将这个新对象添加到ArrayList或Hashmap或任何你喜欢的
  4. closuresResultSet,Statement和数据库连接

完成

编辑:现在你已经发布的代码,我已经做了一些改变。

 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; } 

我刚刚清理了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; } 

RHT几乎没有。 或者你可以使用RowSetDynaClass ,让别人做所有的工作:)

一些事情,以提高其他答案。 首先,你永远不应该返回一个HashMap ,这是一个特定的实现。 而是返回一个普通的旧java.util.Map 。 但是这个例子实际上并不正确。 您的代码只返回ResultSet的最后一行作为(哈希)映射。 你反而要返回一个List<Map<String,Object>> 。 想想你应该如何修改你的代码来做到这一点。 (或者你可以采取戴夫牛顿的build议)。

这是我的替代解决scheme,而不是一个地图列表,我正在使用列表的地图。 testing5000个元素的表格,在远程数据库上,eiter方法的时间大约是350ms。

 private Map<String, List<Object>> resultSetToArrayList(ResultSet rs) throws SQLException { ResultSetMetaData md = rs.getMetaData(); int columns = md.getColumnCount(); Map<String, List<Object>> map = new HashMap<>(columns); for (int i = 1; i <= columns; ++i) { map.put(md.getColumnName(i), new ArrayList<>()); } while (rs.next()) { for (int i = 1; i <= columns; ++i) { map.get(md.getColumnName(i)).add(rs.getObject(i)); } } return map; }