【问题标题】:Spring JdbcTemplate / NamedParameterJdbcTemplate passing null value as a parameter valueSpring JdbcTemplate / NamedParameterJdbcTemplate 传递空值作为参数值
【发布时间】:2012-02-15 02:01:16
【问题描述】:

我在使用 Spring 框架的 MapSqlParameterSource 将空值传递给 NamedParameterJdbcTemplate 时遇到问题。有人知道怎么做吗?

目前我的代码是:

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 的地方。

【问题讨论】:

  • 你是否为从newNamedParameterJDBCTemplate()返回的NamedParameterJDBCTemplate设置了dataSource
  • xSNRG,你能分享一下是什么问题吗? Titi 的回答与您的代码相同。

标签: spring jdbc jdbctemplate


【解决方案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】:

        Map.of() 不支持 null

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

        【讨论】:

        • 谢谢,帮了我)
        【解决方案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";
          

          【讨论】:

            猜你喜欢
            • 2015-09-08
            • 2013-04-27
            • 2015-09-24
            • 1970-01-01
            • 2018-05-04
            • 1970-01-01
            • 1970-01-01
            • 2016-03-27
            相关资源
            最近更新 更多