Spring JdbcTemplate/NamedParameterJdbcTemplate将null值作为参数值传递

Ale*_*eld 11 spring jdbc jdbctemplate

我有一个问题,使用spring框架的MapSqlParameterSource将null值传递给NamedParameterJdbcTemplate.谁知道怎么做?

目前我的代码是:

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);
Run Code Online (Sandbox Code Playgroud)

这是我得到NullPointerException的地方.

Tit*_*ore 13

这是我在Spring 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);
Run Code Online (Sandbox Code Playgroud)

工作良好.也许堆栈跟踪可能会有所帮助?


bab*_*ira 9

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

addValue(String paramName, Object value,int sqlType)
Run Code Online (Sandbox Code Playgroud)

尝试提供java.sql.Types.NULL作为sqlType.

可能这有帮助.


小智 6

参数名称后面有一个额外的空格:

params.addValue("project ", null);
                        ?   
params.addValue("id ", 1);
                   ?
Run Code Online (Sandbox Code Playgroud)