Попытка поместить Значения Результирующего набора в Карту

Я пытаюсь поместить набор результатов (значения запроса БД) в 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, которая обновляется данными строк.

Вместо этого вы должны создать новую карту для каждой строки!

Другими словами: ваш текущий код создает одну карту, которая обновляется для каждой итерации "строки". И, в конце концов, вы помещаете ту же самую карту в вашу внешнюю карту.

Другие вопросы по тегам