【问题标题】:How to pass multiple named parameters to Spring JdbcTemplate?如何将多个命名参数传递给 Spring JdbcTemplate?
【发布时间】:2012-04-25 12:15:51
【问题描述】:

我在 Spring Dao 中有以下代码,效果很好 -

Object args[] = { userId, restaurantId };
int userOrderCount = getJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = ? AND restaurantidfk_order = ?", 
         args
    );

但是,如果我决定使用 NamedParameters 进行如下查询 -

int userOrderCount = getNamedParameterJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = :userId AND restaurantidfk_order = :restaurantId", 
         new MapSqlParameterSource(":restaurantId", restaurantId)
             .addValue(":userId", userId)
    );

我遇到了这个异常 -

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'userId': No value registered for key 'userId'.

我知道一句金句“如果没有坏就不要修”。

但是,我还是忍不住想知道为什么会这样?

【问题讨论】:

    标签: java database spring jdbc


    【解决方案1】:

    使用这个。

    new MapSqlParameterSource("restaurantId", restaurantId)
        .addValue("userId", userId);
    

    而不是这个。

    new MapSqlParameterSource(":restaurantId", restaurantId)
        .addValue(":userId", userId);
    

    【讨论】:

    • (+1) 正确:为了让读者更清楚:你不能在地图参数前面有:
    猜你喜欢
    • 2015-09-24
    • 2019-12-07
    • 2018-07-29
    • 2019-08-15
    • 1970-01-01
    • 2016-10-28
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多