如何将多个命名参数传递给Spring JdbcTemplate?

时间:2012-04-13 05:22:09

标签: java database spring jdbc

我在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'.

我知道金色的格言“如果没有破坏就不要修理它。”

但是,我仍然不禁想知道为什么会这样?

1 个答案:

答案 0 :(得分:25)

使用它。

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

而不是这个。

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