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