【问题标题】:jdbcTemplate error passing args countjdbcTemplate 错误传递参数计数
【发布时间】:2017-06-22 19:21:46
【问题描述】:

奇怪的 JDBC TEMPLATE 错误。

当您使用下面的代码对表执行更新时,我收到以下错误:

Org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback;不正确的 SQL 语法 [UPDATE adminformulariocontratacao SET statusatual =? WHERE (formulariouuid =?)];嵌套异常是 java.sql.SQLException: No value specified for parameter 2

public void atualizaStatusAtendimentoContratacao(String formulariouuid,String statusGravar) {

    final String query = "UPDATE adminformulariocontratacao "
                      +  "SET statusatual = ? "                             
                      +  "WHERE (formulariouuid = ?)";

    Object argsAtualizaStatus = new Object[] { 
            statusGravar, 
            formulariouuid
        };

    try {
        jdbcTemplate.update(query, argsAtualizaStatus);
    } catch (DataAccessException e) {
        logger.log(Level.ERROR,
                "##ERRO ao Gravar atualização de status do atendimento contratacao:" + e.getLocalizedMessage());
    }

当我按照下面的修改运行代码时,它可以正常工作。有什么区别?

public void atualizaStatusAtendimentoContratacao(String formulariouuid,String statusGravar) {

    final String query = "UPDATE adminformulariocontratacao "
                      +  "SET statusatual = ? "                             
                      +  "WHERE (formulariouuid = ?)";

    try {
        jdbcTemplate.update(query, new Object[] {statusGravar,formulariouuid});
    } catch (DataAccessException e) {
        logger.log(Level.ERROR,
                "##ERRO ao Gravar atualização de status do atendimento contratacao:" + e.getLocalizedMessage());
    }

}

【问题讨论】:

    标签: spring spring-mvc jdbctemplate


    【解决方案1】:

    没有什么奇怪的:

    来自源代码:

    @Override
    public int update(String sql, Object... args) throws DataAccessException {
        return update(sql, newArgPreparedStatementSetter(args));
    }
    

    万一:

    对象 argsAtualizaStatus = new Object[] { 状态格拉瓦, 公式 };

    类型是对象

    对象[] argsAtualizaStatus = 新对象[] { 状态格拉瓦, 公式 };

    类型是对象数组

    当你这样做时:

    jdbcTemplate.update(query, new Object[] {statusGravar,formulariouuid});

    你给出正确的类型 - 数组

    在第一个示例中,您给出 object ,jdbc 模板将其用作 Object 而不是 Object 数组

    修复:

    Object [] argsAtualizaStatus = new Object[] {statusGravar, formulariouuid};

    【讨论】:

    • 你真的是对的。我不认为我缺少作为数组的参数。我的错。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2014-12-18
    • 2015-09-24
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 2014-04-27
    相关资源
    最近更新 更多