首页 > 解决方案 > SQL 状态 [null]; 错误代码[0];ORA-00900: 使用 jdbcTemplate 的 SQL 语句无效

问题描述

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

update TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=?

以下是例外

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback; SQL [更新 TEMP_BRD_STATS SET STATS=null WHERE BRDC_STAT_ID=?] 的未分类 SQLException;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,但它仍然抛出异常。一种奇怪的场景。

标签: javaspringoraclejdbctemplate

解决方案


该参数?显然没有填写。也许是一些参数,例如:

new Object[] { brdStatId }

通常 JDBC 它可能使用的不是基类版本,PreparedStatement.executeUpdate()而是基类版本Statement.executeUpdate(String sql)


添加有问题的代码后:

啊,查询(SELECT)和更新(INSERT/UPDATE)混淆了:

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

推荐阅读