我有下面的代碼片段:構建地圖與java.sql.ResultSet中
Connection connection = getConnection(schemaName);
Statement stmt = connection.createStatement();
String sql = "SELECT * FROM " + tableName;
ResultSet rs = stmt.executeQuery(sql);
現在我要實現的是建立一個
Map<String , List<String>>
,其中關鍵是什麼
columnName和value是columnValues的列表。這是我的代碼:
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
List<String> columnNames = new LinkedList<>();
for (int i = 1; i <= columnCount; i++) {
columnNames.add(rsmd.getColumnName(i));
}
Map<String, List<String>> columnNameToValuesMap = new HashMap<String, List<String>>();
for (String columnName : columnNames) {
List<String> values = new ArrayList<>();
try {
while (rs.next()) {
values.add(rs.getString(columnName));
}
} catch (SQLException e) {
e.printStackTrace();
}
columnNameToValuesMap.put(columnName, values);
}
問題是在第一次columnName迭代之後,rs.next()是空的。所以基本上結果地圖只包含第一列的值。我怎樣才能重複使用相同的resultSet每次迭代?爲什麼在第一個之後是空的?
* *爲什麼你要這麼做?看起來你沒有特別好的理由重新創建並行陣列。 – chrylis
與您的問題無關,但您應該使用'getColumnLabel'而不是'getColumnName' –