2012-02-15 12 views
8

Mam problem z przekazywaniem wartości pustej do NamedParameterJdbcTemplate przy użyciu MapSqlParameterSource w strukturze sprężyny. Ktoś wie, jak to zrobić?Sprężyna JdbcTemplate/NamedParameterJdbcTemplate przekazująca wartość pustą jako wartość parametru

Obecnie mój kod to:

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

To gdzie ja dostać NullPointerException.

+0

Czy ustawiono 'źródło danych' dla' NamedParameterJDBCTemplate', które powraca z 'newNamedParameterJDBCTemplate()'? – Saar

+0

xSNRG, czy możesz podzielić się tym, co było problemem? Odpowiedź Titi jest taka sama jak Twój kod. – bschandramohan

Odpowiedz

11

To jest mój kod na wiosnę 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); 

działa dobrze. Może śledzenie stosu może pomóc?

7

W czystym jdbc jego PreparedStatement.setNull (int, java.sql.Types.NULL);
Od MapSqlParameterSource api jest

addValue(String paramName, Object value,int sqlType) 

spróbować zapewniając java.sql.Types.NULL jako typ SQLTYPE.

Może to pomaga.

+0

Świetnie! Miałem duży błąd – jrey

-1

proszę upewnić się, czy źródło danych jest ustawiony na swojej jdbcTemplate jak poniżej jako przykład namedParameterJdbcTemplate = new NamedParameterJdbcTemplate (źródła danych);

3

jest dodatkowa przestrzeń po nazwie parametru:

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

myślę średnik jest dodatkowo w kodzie poniżej:

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

Usuń średnik po id. Powinno być jak:

String sql = "update person set project = :project where id = :id"; 
Powiązane problemy