Попытка поместить Значения Результирующего набора в Карту
Я пытаюсь поместить набор результатов (значения запроса БД) в LinkedHashMap>.
Каждая итерация строки. Значение переопределяется при вводе в DBMap.
<LinkedHashMap<String, String>> rowData = new LinkedHashMap<>();
<LinkedHashMap<Integer, LinkedHashMap<String, String>>> dbData = new LinkedHashMap<>();
while (rset.next()) {
for (int col = 1; col < countCol+1; col++) {
String colname =rset.getMetaData().getColumnName(col);
rowData.put(colname, rset.getString(col));
}
int rowV = rset.getRow();
dbData.put(rowV, rowData);
}
Этот код дает мне карту только последней строки набора результатов для всех ключей в dbData Map.
2 ответа
Вы ставите то же самое LinkedHashMap
экземпляр (на который ссылается rowData
переменная) несколько раз в вашем внешнем Map
, По этой причине значения последней строки БД перезаписывают все предыдущие значения.
Вы должны создать новый LinkedHashMap
экземпляр для каждой итерации while
цикл:
LinkedHashMap<Integer, LinkedHashMap<String, String>> dbData = new LinkedHashMap<>();
while (rset.next()) {
LinkedHashMap<String, String> rowData = new LinkedHashMap<>();
for (int col = 1; col < countCol+1; col++) {
String colname =rset.getMetaData().getColumnName(col);
rowData.put(colname, rset.getString(col));
}
int rowV = rset.getRow();
dbData.put(rowV, rowData);
}
Все просто: у вас есть только одна карта rowData, которая обновляется данными строк.
Вместо этого вы должны создать новую карту для каждой строки!
Другими словами: ваш текущий код создает одну карту, которая обновляется для каждой итерации "строки". И, в конце концов, вы помещаете ту же самую карту в вашу внешнюю карту.