从java.sql.ResultSet生成具有列名和列值的映射
我有以下片段:从java.sql.ResultSet生成具有列名和列值的映射,java,jdbc,Java,Jdbc,我有以下片段: Connection connection = getConnection(schemaName); Statement stmt = connection.createStatement(); String sql = "SELECT * FROM " + tableName; ResultSet rs = stmt.executeQuery(sql); 现在我想要实现的是建立一个 Map<String , List<String&
Connection connection = getConnection(schemaName);
Statement stmt = connection.createStatement();
String sql = "SELECT * FROM " + tableName;
ResultSet rs = stmt.executeQuery(sql);
现在我想要实现的是建立一个
Map<String , List<String>>
Map
其中key是columnName,value是columnValue的列表。这是我的密码:
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);
}
ResultSetMetaData rsmd=rs.getMetaData();
int columnCount=rsmd.getColumnCount();
List columnNames=新建LinkedList();
对于(int i=1;i,您可以按照以下步骤操作:
(1) 使用空的列表
初始化列名称到值映射
,列名称作为键
(2) 使用rs.next()
(3) 使用for
循环获取每列数据,并添加到列表
值
对象
(4) 将列数据的列表添加到columnNameToValuesMap
对象
您可以参考下面的代码和注释:
List<String> columnNames = new LinkedList<>();
Map<String,List<String>> columnNameToValuesMap=new HashMap<String, List<String>>();
for (int i = 1; i <= columnCount; i++) {
String columnName = rsmd.getColumnName(i);
columnNames.add(columnName);
//Load the Map initially with keys(columnnames) and empty list
columnNameToValuesMap.put(columnName, new ArrayList());
}
try {
while (rs.next()) { //Iterate the resultset for each row
for (String columnName : columnNames) {
//Get the list mapped to column name
List<String> columnDataList = columnNameToValuesMap.get(columnName);
//Add the current row's column data to list
columnDataList.add(rs.getString(columnName));
//add the updated list of column data to the map now
columnNameToValuesMap.put(columnName, columnDataList);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
List columnNames=newlinkedlist();
Map columnNameToValuesMap=新HashMap();
对于(int i=1;我将您放入columnNames循环之外的映射中..columnName超出了范围。现在更新了代码,您可以查看一下,基本上您需要多个列表对象,每个对象都映射到列名。为什么要这样做?看起来您重新创建并行数组并没有特别好的理由。与您的问题无关,但应该使用getColumnLabel
而不是getColumnName