Недавно я обновил Java 6 до 8, mySql 5.5 до 5.7 и Spring MVC 2 до 5.0.9. У меня есть следующий код, который работал до обновления. Но теперь, если я попробую, он вернет список карты с одной записью, но карта пуста. Но правда в том, что у базы данных есть одно доступное значение.
Map<Integer, String> transmittalIds = new HashMap<Integer, String>();
String query = "";
query.append("SELECT TRANSMITTALID, TRANSMITTALCODE FROM LEADERTRANSMITTAL WHERE ")
.append(" CASENUMBERREPORT = 'N'")
.append(" AND STATUS = 'SENT'");
List<Map<Integer, String>> list = getJdbcTemplate().query(query.toString(), new TransmittalIdMapper());
public static final class TransmittalIdMapper implements RowMapper<Map<Integer, String>>{
@Override
public Map<Integer, String> mapRow(ResultSet rs, int arg1) throws SQLException {
Map<Integer, String> map = new HashMap<Integer, String>();
while(rs.next()){
int transmittalId = rs.getInt("TRANSMITTALID");
String transmittalCode = rs.getString("TRANSMITTALCODE");
map.put(transmittalId, transmittalCode);
}
return map;
}
}
System.out.println("List size: "+list.size());
if ( list != null && !list.isEmpty()){
System.out.println("List: "+list.get(0));
System.out.println("Map: "+list.get(0).size());
transmittalIds = list.get(0);
}
Ниже приводится вывод: Размер списка: 1Список: {}Карта: 0
Кстати, while(rs.next()) внутри mapRow кажется странным - разве это не отображает несколько строк? Если этот код делает то, что я думаю, ваш список никогда не должен содержать более одной карты.
@Thomas Я пробовал это в MySQL Workbench, и он возвращает один результат. Да, он будет содержать одну запись, и у нее будет одна запись, но эта запись - это карта типа int и String, и она пуста вместо значений.
Если есть только одна строка, rs.next перейдет к следующей, что приведет к пустому результату. Вы не должны использовать rs.next в RowMapper, поскольку JdbcTemplate сделает это за вас. С этим решением вы в основном всегда пропускаете первую строку. Короче говоря, удалите цикл while. Это вернет список карт, каждая из которых имеет 1 запись.




Вы пробовали этот запрос непосредственно в клиенте mysql или другом клиенте SQL? Если там не работает, то, скорее всего, проблема не в JDBC.