值java.sql.SQLException:在JdbcTemplate的在条款无效列类型更新查询

问题描述 投票:2回答:1

我试图更新使用JdbcTemplate的Oracle表列如下

String sql = "update EVENTS set status = null where TEMP_ID IN (select TEMP_ID from EVENTS where STATUS = 'COMPLETE' and EXCHANGE_ID IN (?)   )";    
Map<String, Object> paramMap = new HashMap<String, Object>();
List<Long> longValues = new ArrayList<Long>();
longValues.add(1);
longValues.add(2);
paramMap.put("EXCHANGE_ID", longValues);
int rowsAffected = this.jdbcTemplate.update(sql,paramMap,Long.class);

其中EXCHANGE_ID是在活动表与数据类型NUMBER(6,0)的一列。

当我尝试按以下方式运行上面的程序则抛出一个异常

PreparedStatementCallback;对于SQL未经归类的SQLException [更新事件设定状态= NULL其中TEMP_ID IN(从活动选择TEMP_ID其中STATUS = '完整的' 和EXCHANGE_ID =?)]; SQL状态[99999];错误代码[17004];无效的列类型;嵌套的异常是java.sql.SQLException中:无效的列类型

编辑:在子句的参数的数目是不固定的。所以参数的数量可以是2,3,取决于用户。

为简单起见,我已经加入以下在代码行

longValues.add(1);
longValues.add(2);

在现实中我收到从表单参数。我刚才说的部分代码在我的问题。

由于一些限制,我只能用?在我的sql查询我的参数不到位:EXCHANGE_ID

java spring oracle jdbctemplate
1个回答
1
投票

更新:您需要使用:在SQL语句EXCHANGE_ID:

final String sql = "update EVENTS set status = null where TEMP_ID IN (select TEMP_ID from EVENTS where STATUS = 'COMPLETE' and EXCHANGE_ID = :EXCHANGE_ID)";

final MapSqlParameterSource params = new MapSqlParameterSource();
params.put("EXCHANGE_ID", Long.valueOf(1));

int rowsAffected = this.jdbcTemplate.update(sql, params);
© www.soinside.com 2019 - 2024. All rights reserved.