【问题标题】:NamedParameterJdbcTemplate cannot execute insert into selectNamedParameterJdbcTemplate 无法执行 insert into select
【发布时间】:2020-02-21 02:26:07
【问题描述】:

我正在使用informix,我正在尝试使用spring 从java 执行一个简单的查询。这是查询。

INSERT INTO table1
SELECT val1, val2, val3
FROM table2
WHERE condition

我已经验证了查询语法,如果使用客户端执行它,运行完美。但是当它使用NamedParameterJdbcTemplate 运行时会抛出语法错误,我不知道为什么。有人可以解释一下原因和解决我问题的好方法。

这是我的 java 代码。

String LOG_INFO = 
   "INSERT INTO table1 SELECT val1,  val2,  (SYSDATE - 5 UNITS HOUR),  val3 " +
   " FROM table2 " +
   " WHERE membership_nbr = :user_nbr_param";
String USER_NBR_PARAM = "user_nbr_param";

@Autowired
  private NamedParameterJdbcTemplate jdbcTemplate;

public Integer logInfo(BigInteger userNbr) {
    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue(USER_NBR_PARAM, userNbr);

    return jdbcTemplate.update(LOG_INFO, params);
  }

【问题讨论】:

  • 可以添加异常的stacktrace吗?

标签: spring jdbc informix


【解决方案1】:

尝试使用Map 而不是MapSqlParameterSource

public Integer logInfo(BigInteger userNbr) {
    Map<String, Object> params = new HashMap<>();
    params.put(USER_NBR_PARAM, userNbr);
    return jdbcTemplate.update(LOG_INFO, params);
}

阅读:why we use MapSqlParameterSource 了解更多信息。

【讨论】:

    猜你喜欢
    • 2013-06-21
    • 2011-01-22
    • 2012-01-23
    • 2017-03-13
    • 2014-07-17
    • 2014-04-23
    • 2014-07-31
    • 2023-02-09
    • 2014-03-22
    相关资源
    最近更新 更多