Почему getJdbcTemplate (). Query возвращает нулевой список после обновления mySql?

Недавно я обновил 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

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

Thomas 11.12.2018 10:56

Кстати, while(rs.next()) внутри mapRow кажется странным - разве это не отображает несколько строк? Если этот код делает то, что я думаю, ваш список никогда не должен содержать более одной карты.

Thomas 11.12.2018 10:59

@Thomas Я пробовал это в MySQL Workbench, и он возвращает один результат. Да, он будет содержать одну запись, и у нее будет одна запись, но эта запись - это карта типа int и String, и она пуста вместо значений.

Aakash Patel 11.12.2018 11:01

Если есть только одна строка, rs.next перейдет к следующей, что приведет к пустому результату. Вы не должны использовать rs.next в RowMapper, поскольку JdbcTemplate сделает это за вас. С этим решением вы в основном всегда пропускаете первую строку. Короче говоря, удалите цикл while. Это вернет список карт, каждая из которых имеет 1 запись.

M. Deinum 11.12.2018 11:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
103
0

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