11

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

我知道那句黄金格言“如果没有损坏就不要修复它”。

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

4

1 回答 1

30

用这个。

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

而不是这个。

new MapSqlParameterSource(":restaurantId", restaurantId)
    .addValue(":userId", userId);
于 2012-04-13T05:59:58.590 回答