JavaでResultSetを効率的に処理する方法


1 Answers

私はちょうどいくつかの警告を排除するために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;
}
Question

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



他の答えを強化するためのもののカップル。 まず、特定の実装であるHashMap返すべきではありません。 代わりに、普通の古いjava.util.Map返します。 とにかくこれは実際にはこの例では正しくありません。 あなたのコードはResultSetの最後の行だけを(ハッシュ)マップとして返​​します。 代わりにList<Map<String,Object>>を返す必要がありList<Map<String,Object>> 。 これを行うためにコードをどのように変更するべきかを考えてください。 (または、Dave Newtonの提案を受け入れることもできます)。




Related