Spring JdbcTemplate / NamedParameterJdbcTemplate передает нулевое значение в качестве значения параметра - PullRequest
11 голосов
/ 15 февраля 2012

У меня проблема с передачей нулевого значения в NamedParameterJdbcTemplate с использованием MapSqlParameterSource платформы Spring. Кто-нибудь знает, как это сделать?

В настоящее время мой код:

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.

Ответы [ 5 ]

12 голосов
/ 15 февраля 2012

Это мой код на 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);

отлично работает.Может быть, трассировка стека может помочь?

8 голосов
/ 15 февраля 2012

В чистом jdbc его PreparedStatement.setNull (int, java.sql.Types.NULL);
Из API MapSqlParameterSource есть

addValue(String paramName, Object value,int sqlType)

попробуйте предоставить java.sql.Types.NULL как sqlType.

Может быть, это поможет.

6 голосов
/ 20 июня 2017

После имени параметра есть дополнительный пробел:

params.addValue("project ", null);
                        ↑   
params.addValue("id ", 1);
                   ↑
0 голосов
/ 02 ноября 2017

Я думаю, что точка с запятой является дополнительной в коде ниже:

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

Удалите точку с запятой после идентификатора.Это должно быть как:

String sql = "update person set project = :project where id = :id";
0 голосов
/ 30 декабря 2013

Пожалуйста, убедитесь, что источник данных установлен для вашего jdbcTemplate, как показано ниже в качестве примера. namedParameterJdbcTemplate = new NamedParameterJdbcTemplate (dataSource);

...