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

Spring JdbcTemplate/NamedParameterJdbcTemplate将null值作为参数值传递,spring,jdbc,jdbctemplate,Spring,Jdbc,Jdbctemplate,我在使用spring框架的MapSqlParameterSource向NamedParameterJdbcTemplate传递null值时遇到问题。有人知道怎么做吗 目前我的代码是: String sql = "update person set project = :project where id = :id;"; MapSqlParameterSource params = new MapSqlParameterSource(); params.addValue("project ", n

我在使用spring框架的MapSqlParameterSource向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的地方。

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

addValue(String paramName, Object value,int sqlType)
尝试提供java.sql.Types.NULL作为sqlType。


这可能会有所帮助。

这是我在Spring3.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);
很好。
也许堆栈跟踪可能会有所帮助?

请确保是否为jdbcTemplate设置了数据源,如下例所示
namedParameterJdbcTemplate=新的namedParameterJdbcTemplate(数据源)

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

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

我认为分号在下面的代码中是额外的:

String sql = "update person set project = :project where id = :id;";
删除id后的分号。它应该类似于:

String sql = "update person set project = :project where id = :id";
String sql=“update person set project=:project,其中id=:id;”;
//问题:Map.of不支持空值,但HashMap支持:
Map params=新的HashMap();
参数put(“项目”,空);
参数put(“id”,1);
int count=newNamedParameterJDBCTemplate().update(sql,params);

是否为从
newNamedParameterJDBCTemplate()
返回的
NamedParameterJDBCTemplate
设置了
dataSource
?xSNRG,您能分享问题出在哪里吗?Titi的答案与您的代码相同。
String sql = "update person set project = :project where id = :id;";

// ISSUE: Map.of doesn't support null values, but HashMap does:
Map<String, Object> params = new HashMap<>();
params.put("project", null);
params.put("id", 1);
int count = newNamedParameterJDBCTemplate().update(sql, params);