2012-02-15 122 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";