SQL状态[null];错误代码[0]; ORA-00900:带有jdbcTemplate

时间:2019-02-06 10:08:00

标签: java spring oracle jdbctemplate

从jdbcTemplate执行以下查询时,我遇到异常

update TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=?

以下是例外

  

org.springframework.jdbc.UncategorizedSQLException:   PreparedStatementCallback; SQL的未分类SQLException [更新   TEMP_BRD_STATS SET STATS = null WHERE BRDC_STAT_ID =?]; SQL状态[null];   错误代码[0]; ORA-00900:无效的SQL语句

其中TEMP_BRD_STATS是我的表名STATS和BRDC_STAT_ID是我的表中的列

注意:-STATS列允许为空

但是,我可以通过提供有效的BRDC_STAT_ID列值来在sql Developer中成功执行查询。

例如

update TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=523;

编辑:以下是Java代码

result = this.jdbcTemplate.query("update TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=?",  new Object[] {523}, new QueryResultSetExtractor());

尽管执行了以上代码,但在抛出异常后,列的值却被更改了。

假设我的列STATS具有“ SUCCESS”值,并且在执行上述Java代码后,其值已更改为null,但仍然引发异常。一种奇怪的情况。

1 个答案:

答案 0 :(得分:5)

参数?显然没有填写。也许像这样的参数:

new Object[] { brdStatId }

在一般的JDBC中,它可能不是使用PreparedStatement.executeUpdate()而是使用基类版本Statement.executeUpdate(String sql)


有问题的代码添加后:

啊,查询(SELECT)和 update (INSERT / UPDATE)混合在一起:

this.jdbcTemplate.update("update TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=?", 523);