NamedParameterJdbcTemplate 无法执行 insert into select

Posted

技术标签:

【中文标题】NamedParameterJdbcTemplate 无法执行 insert into select【英文标题】:NamedParameterJdbcTemplate cannot execute 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吗? 【参考方案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 了解更多信息。

【讨论】:

以上是关于NamedParameterJdbcTemplate 无法执行 insert into select的主要内容,如果未能解决你的问题,请参考以下文章