java - 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,但它仍然抛出异常。一种奇怪的场景。
解决方案
该参数?
显然没有填写。也许是一些参数,例如:
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);
推荐阅读
- python - 如何编写一个 python 程序来为 k-means 算法创建迭代集群?
- go - Redshift 返回一个 []uint8 而不是整数,在它们之间转换会返回不正确的值
- dialogflow-es - 我们如何中断 Intent (Dialogflow)
- swift - 使用未解析的标识符 firebase 功能
- javascript - 如何以角度缩小打字稿以进行部署?
- python - 通过 agg 为 pandas 组编写多个列名
- navision - Navision 总帐输入日期和时间
- sql - url中的重复查询字符串
- java - 是数组列表
聚合还是组合? - python - 有没有办法强制 ODEINT 在 Python 中使用特定算法?