Maison  >  Questions et réponses  >  le corps du texte

jdbcTemplateObject.batchUpdate() a déclenché une exception TransientDataAccessResourceException, l'index du paramètre était hors plage (4 > 3)

En utilisant Java 1.8Spring Framework 4.0.3-RELEASE, j'essaie d'insérer une ligne dans une base de données MySQL après avoir obtenu une valeur provenant d'une source externe.

Essayez ceci :

private static JdbcTemplate jdbcTemplateObject = null;
private static final String INSERT_QUERY = "insert into order_table(id,order_id,created_time,updated_time)VALUES(?,?,now(),now())";

parseFeedAndStoreIntoDB() {
    List<Object[]> insertData = new ArrayList<>();
    SqlRowSet sqlRowSet = null;

    // id, order_id, created_time, updated_time有值
    insertData.add(new Object[] {id, order_id, created_time, updated_time});
    if (insertData.size() > 0) {
        // 这里出错了
        jdbcTemplateObject.batchUpdate(INSERT_QUERY, insertData);
    }
}

Lorsque j'exécute cette méthode, j'obtiens l'exception suivante :

Exception in parseFeedAndStoreIntoDB() method
org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL 
[insert into order_table(id,order_id,created_time,updated_time)VALUES(?,?,now(), now());]; Parameter index out of range (4 > 3).; nested exception is java.sql.SQLException: 
Parameter index out of range (4 > 3).

J'ai compté le nombre de lignes, il y a 4 lignes à la fois dans mon code Java et dans la table de la base de données MySQL que j'ai créée.

P粉256487077P粉256487077403 Il y a quelques jours421

répondre à tous(1)je répondrai

  • P粉647504283

    P粉6475042832023-09-13 09:02:50

    Votre demande est à idorder_id上有绑定参数,其他两个字段在查询中设置为now(). va

    insertData.add(new Object[] {id, order_id, created_time, updated_time});

    changé en

    insertData.add(new Object[] {id, order_id});

    ou volonté

    private static final String INSERT_QUERY = "insert into "
            + "order_table(id,order_id,created_time,updated_time) "
            + "VALUES(?,?,now(),now())";

    changé en

    private static final String INSERT_QUERY = "insert into "
            + "order_table(id,order_id,created_time,updated_time) "
            + "VALUES(?,?,?,?)";

    répondre
    0
  • Annulerrépondre