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が発生する場所です。
これは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);
正常に動作します。たぶんスタックトレースが役立つかもしれませんか?
純粋なjdbcでは、そのPreparedStatement.setNull(int、Java.sql.Types.NULL);
MapSqlParameterSourceAPIから
addValue(String paramName, Object value,int sqlType)
java.sql.Types.NULLをsqlTypeとして提供してみてください。
これが役立つかもしれません。
パラメータ名の後に余分なスペースがあります:
params.addValue("project ", null);
↑
params.addValue("id ", 1);
↑
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);