RHT /BradMsとLestosanswerのソリューションを改善しました。
私は両方のソリューションを拡張して、それが見つかった状態をそこに残しました。したがって、現在のResultSetの位置を保存し、マップを作成した後で復元します。
rsはResultSetであり、そのフィールド変数であるため、私のソリューションではスニペットは表示されません。
BradMsソリューションの特定のマップをgernericマップに置き換えました。
public List<Map<String, Object>> resultAsListMap() throws SQLException
{
var md = rs.getMetaData();
var columns = md.getColumnCount();
var list = new ArrayList<Map<String, Object>>();
var currRowIndex = rs.getRow();
rs.beforeFirst();
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);
}
rs.absolute(currRowIndex);
return list;
}
Lestosソリューションでは、コードを最適化しました。彼のコードでは、そのforループの反復ごとにマップを検索する必要があります。私はそれを1つの配列に減らしました-各forループの反復にアクセスします。したがって、プログラムはその文字列キーの各反復ステップを検索してはなりません。
public Map<String, List<Object>> resultAsMapList() throws SQLException
{
var md = rs.getMetaData();
var columns = md.getColumnCount();
var tmp = new ArrayList[columns];
var map = new HashMap<String, List<Object>>(columns);
var currRowIndex = rs.getRow();
rs.beforeFirst();
for (int i = 1; i <= columns; ++i)
{
tmp[i - 1] = new ArrayList<>();
map.put(md.getColumnName(i), tmp[i - 1]);
}
while (rs.next())
{
for (int i = 1; i <= columns; ++i)
{
tmp[i - 1].add(rs.getObject(i));
}
}
rs.absolute(currRowIndex);
return map;
}