jdbcTemplate.batchUpdate для списка вставок не работает

У меня кончились нервные клетки, и мне очень нужна ваша помощь, ребята.

По какой-то причине я не могу получить список ответов, вставленных в базу данных

Я использую jdbcTemplate для этого, и мой код выглядит так

public void insertVastaukset(List<Vastaus> vastaukset) {
    final String sql = "insert into vastaus (kysymysID, vastausteksti) values(?,?)";
    getJdbcTemplate().batchUpdate(sql,
            new BatchPreparedStatementSetter() {
                @Override
                public void setValues(PreparedStatement ps, int i)
                        throws SQLException {
                    Vastaus vastaus = vastaukset.get(i);
                    ps.setInt(1, vastaus.getKysymysID());
                    ps.setString(2, vastaus.getVastausteksti());

                }

                @Override
                public int getBatchSize() {
                    return vastaukset.size();
                }
            });}

И почему-то программа не выдает ошибки! Когда я попробовал это пару дней назад, он дал мне нулевой указатель, но теперь он исправлен, но вставки в базу данных все еще не создаются. Помогите пожалуйста! Большое спасибо!


person JSEvgeny    schedule 22.05.2016    source источник
comment
Правильно ли настроена ваша транзакция. Это фиксируется после вызова пакетного обновления?   -  person Manas Marthi    schedule 22.05.2016
comment
кстати jdbcTemplate.update и запрос работают нормально   -  person JSEvgeny    schedule 22.05.2016
comment
@ManasMarthi Я не знаю, я новичок в jdbcTemplate, как это проверить? Я также попытался отобразить элементы списка в конструкции batchUpdate, и это работает, но в базе данных все еще нет вставок.   -  person JSEvgeny    schedule 22.05.2016
comment
поскольку обновление работает нормально, транзакция может работать нормально. batchUpdate возвращает массив int. попробуйте напечатать значения в нем, чтобы увидеть, что происходит. Посмотрите раздел 18.4 в весенней ссылке   -  person Manas Marthi    schedule 22.05.2016
comment
Интересно, является ли org.springframework.jdbc.datasource.DriverManagerDataSource ОБЯЗАТЕЛЬНЫМ, потому что у меня есть org.apache.commons.dbcp.BasicDataSource, и когда я меняю его на первый, вся программа не запускается и выдает ошибку 400   -  person JSEvgeny    schedule 22.05.2016
comment
Я попробовал то же пакетное обновление, что и в справочнике по структуре Spring (ваш код аналогичен). это работало абсолютно нормально. И да, я использую DriverManagerDataSource ‹beans:bean id=dataSource class=org.springframework.jdbc.datasource.DriverManagerDataSource› ‹beans:property name=driverClassName value=${jdbc.driverClassName} /› ‹beans :property name=url value=${jdbc.url} /› ‹beans:property name=username value=${jdbc.username} /› ‹beans:property name=password value=${jdbc.password} /› ‹ /фасоль:фасоль›   -  person Manas Marthi    schedule 22.05.2016
comment
@ManasMarhi я использую некоторые из ApacheTomcat, и когда я меняю его на org.springframework.jdbc.datasource.DriverManagerDataSource, apache выдает мне ошибку 404   -  person JSEvgeny    schedule 22.05.2016
comment
Изменены зависимости pom, чтобы можно было использовать org.springframework.jdbc.datasource.DriverManagerDataSource. По-прежнему не вставляется в базу данных   -  person JSEvgeny    schedule 23.05.2016
comment
Наконец-то работает!!! Спасибо всем за помощь!   -  person JSEvgeny    schedule 23.05.2016


Ответы (1)


Используйте приведенный ниже блок catch для проверки исключений.

    int[] updateCounts;
    try {
        updateCounts = getJdbcTemplate().batchUpdate("insert into test123 (id, value) values (?,?)",
                new BatchPreparedStatementSetter() {

                //// YOUR CODE HERE

                });               
    }
     catch (Exception sqle) {
        Throwable s2 = sqle;
        System.out.println("=============v"+s2.getClass().getName()+"=====================");
        while (s2!=null) {
            s2.printStackTrace();
            s2 = s2.getCause();
            if(s2 instanceof java.sql.BatchUpdateException) {
                System.out.println("======================^^^^^^======================");
                ((java.sql.BatchUpdateException) s2).getNextException().printStackTrace();
            }
        }
        throw sqle;
    }
person Manas Marthi    schedule 22.05.2016
comment
Спасибо за ответ, я попробую. Но я почти уверен, что проблема в том, что у меня bean id=dataSource class=org.apache.commons.dbcp.BasicDataSource вместо org.apache.commons.dbcp.BasicDataSource, но когда я меняю его, проект не будет работать на апача больше нет. У кого-нибудь есть решение для этого? - person JSEvgeny; 22.05.2016