JDBC ResultSet Data для HashMap

Я не могу установить данные из ResultSet в HashMap.

Мой запрос возвращает 4 записи, но HashMap содержит только последние 2 записи. Тем не менее, в цикле я могу напечатать 4 записи данных. Может ли кто-нибудь помочь?

Вот мой код:

workOrderMap=new HashMap<String, Integer>();

Statement statement = serviceconnection.createStatement();
ResultSet rs = statement.executeQuery("SELECT OPERATION,WORKORDERID FROM History WHERE OPERATION='CREATE'OR OPERATION='UPDATE'");
workOrderMap=new HashMap<String, Integer>();

while (rs.next()) {
    workOrderMap.put(rs.getString("OPERATION"), rs.getInt("WORKORDERID"));
    System.out.println(rs.getString("OPERATION")); // loops 4 times
}

System.out.println("List of Workorder id's" + workOrderMap.size()); // prints 2

2 ответа

Решение

Есть только 2 различных значения, возвращенные из rs.getString("OPERATION"),

Это вряд ли удивительно, учитывая ваш WHERE предложение только позволяет иметь 2 значения:

WHERE OPERATION='CREATE' OR OPERATION='UPDATE'

В Mapключи уникальны put() с тем же значением ключа будет перезаписывать значение ранее там.


При преобразовании наборов строк в POJO я предпочитаю создавать List<Map<String, Object>> - каждый элемент списка является строкой, каждая запись в соответствующей карте - это имена столбцов и их значения.


К вашему сведению WHERE Предложение может быть написано более элегантно, как:

WHERE OPERATION IN ('CREATE', 'UPDATE')

Поскольку ключи одинаковы, вы увидите только 2 значения в hashmap.

пример

Map<String,Integer>  workOrderMap=new HashMap<String, Integer>();

workOrderMap.put("S", 1);
workOrderMap.put("S", 1);
workOrderMap.put("S2", 1);

System.out.println(workOrderMap.size());

ВЫХОД: 2

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