Spring JdbcTemplate/NamedParameterJdbcTemplate, передающее значение null в качестве значения параметра
У меня проблема с передачей нулевого значения в 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.
Ответы
Ответ 1
Это мой код на 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);
отлично работает.
Может быть, трассировка стека может помочь?
Ответ 2
В чистом jdbc его PreparedStatement.setNull(int, java.sql.Types.NULL);
Из MapSqlParameterSource api существует
addValue(String paramName, Object value,int sqlType)
попробуйте предоставить java.sql.Types.NULL как sqlType.
Возможно, это поможет.
Ответ 3
После имени параметра есть дополнительное пространство:
params.addValue("project ", null);
↑
params.addValue("id ", 1);
↑
Ответ 4
String sql = "update person set project = :project where id = :id;";
// ISSUE: Map.of does not 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);
Ответ 5
Пожалуйста, убедитесь, что для вашего jdbcTemplate задан источник данных, как показано ниже в качестве примера
namedParameterJdbcTemplate = new NamedParameterJdbcTemplate (dataSource);
Ответ 6
Я думаю, что точка с запятой добавлена в код ниже:
String sql = "update person set project = :project where id = :id;";
Удалить точку с запятой после id. Он должен выглядеть следующим образом:
String sql = "update person set project = :project where id = :id";