2012-02-15 15 views
8

Tengo un problema al pasar un valor nulo a NamedParameterJdbcTemplate usando MapSqlParameterSource del spring framework. Alguien sabe cómo hacer esto?Spring JdbcTemplate/NamedParameterJdbcTemplate pasando el valor nulo como un valor de parámetro

Actualmente mi código es:

String sql = "update person set project = :project where id = :id;"; 
MapSqlParameterSource params = new MapSqlParameterSource(); 
params.addValue("project ", null); 
params.addValue("id ", 1); 
int count = newNamedParameterJDBCTemplate().update(sql, params); 

Esto es donde consigo una NullPointerException.

+0

¿Se configura el '' dataSource' para NamedParameterJDBCTemplate' que volvía de 'newNamedParameterJDBCTemplate()'? – Saar

+0

xSNRG, ¿puedes compartir cuál fue el problema? La respuesta de Titi es la misma que tu código. – bschandramohan

Respuesta

11

Este es mi código en la primavera 3,1

String sql = "update user set name = :name where id = :id"; 
    MapSqlParameterSource params = new MapSqlParameterSource(); 
    params.addValue("name", null); 
    params.addValue("id", 1); 
    namedParameterJdbcTemplate.update(sql, params); 

funciona bien. ¿Tal vez un rastro de pila podría ayudar?

7

En jdbc puro es PreparedStatement.setNull (int, java.sql.Types.NULL);
De MapSqlParameterSource API no es

addValue(String paramName, Object value,int sqlType) 

intentan proporcionar java.sql.Types.NULL como SQLTYPE.

Puede ser que esto ayude.

+0

¡Genial! Tuve un gran error – jrey

-1

Por favor asegúrese de que si la fuente de datos está configurado para su JdbcTemplate, como a continuación como ejemplo namedParameterJdbcTemplate = new NamedParameterJdbcTemplate (dataSource);

3

Hay un espacio adicional después de nombre de parámetro:

params.addValue("project ", null); 
         ↑ 
params.addValue("id ", 1); 
        ↑ 
0

Creo que es punto y coma extra en código de abajo:

String sql = "update person set project = :project where id = :id;"; 

Quitar punto y coma después de identidad. Debe ser como:

String sql = "update person set project = :project where id = :id"; 
Cuestiones relacionadas