2012-04-13 14 views
6

He siguiente código en un Dao primavera, que funciona muy bien -¿Cómo pasar múltiples parámetros nombrados a Spring JdbcTemplate?

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

Sin embargo, si decido usar NamedParameters para mi consulta como sigue -

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

estoy recibiendo esta excepción -

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

Sé el adagio dorado "No lo corrijas si no está roto".

Pero aun así, no puedo evitar preguntarme ¿por qué está sucediendo esto?

Respuesta

18

usar esto.

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

en lugar de esto.

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

Oh Damn! Un error tan tonto :-( –

+1

(+1) correcto: para que quede más claro para el lector: no debe tener ese ':' delante del parámetro de mapa – Ralph

+1

errores para los pueblos. – erimerturk

Cuestiones relacionadas