2012-04-13 12 views
6

Mam następujący kod w wiosennej Dao, który działa dobrze -Jak przekazać wiele nazwanych parametrów do Spring JdbcTemplate?

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

Jednak jeśli zdecydujesz się skorzystać NamedParameters na moje pytanie w następujący sposób -

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

otrzymuję ten wyjątek -

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

Znam złote powiedzenie "Nie naprawiaj tego, jeśli nie jest zepsute".

Ale wciąż nie mogę przestać się zastanawiać, dlaczego tak się dzieje?

Odpowiedz

18

użyj tego.

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

zamiast tego.

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

O cholera! Taki głupi błąd :-( –

+1

(+1) poprawiono: aby było czytelniej dla czytelnika: nie możesz mieć tego ':' przed błędami parametrów mapy – Ralph

+1

dla narodów. – erimerturk

Powiązane problemy