web-dev-qa-db-ja.com

Spring JdbcTemplate / NamedParameterJdbcTemplateがnull値をパラメーター値として渡す

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が発生する場所です。

11
AlexLiesenfeld

これは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として提供してみてください。

これが役立つかもしれません。

9
baba.kabira

パラメータ名の後に余分なスペースがあります:

params.addValue("project ", null);
                        ↑   
params.addValue("id ", 1);
                   ↑
6
cnstntn
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);
0
epox