我有下面的代码片段:构建地图与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' –