2012-02-15 120 views
8

我有一个问题,使用Spring框架的MapSqlParameterSource传递一个空值给NamedParameterJdbcTemplate。任何人都知道如何做到这一点?Spring JdbcTemplate/NamedParameterJdbcTemplate传递null值作为参数值

目前我的代码是:

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); 

这是我得到一个NullPointerException。

+0

您是否为'namedParameterJDBCTemplate'设置了'dataSource',它从'newNamedParameterJDBCTemplate()'返回? – Saar 2012-07-26 23:44:57

+0

xSNRG,你可以分享是什么问题?通过Titi回答和你的代码一样。 – bschandramohan 2015-08-19 10:22:41

回答

11

这是我在春天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); 

工作正常。 也许堆栈跟踪可能有帮助?

7

在纯jdbc中它的PreparedStatement.setNull(int,java.sql.Types.NULL);
从MapSqlParameterSource API有

addValue(String paramName, Object value,int sqlType) 

尝试提供java.sql.Types.NULL为则sqlType。

可能会有所帮助。

+0

太棒了!我有一个很大的错误 – jrey 2018-01-25 02:44:23

-1

请确定数据源是否设置为您的jdbcTemplate,如下所示 namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

3

有参数名称后面有一个额外的空间:我认为,分号是在下面的代码额外

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

:ID后

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

删除分号。它应该是这样的:

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