【发布时间】:2012-05-24 23:06:07
【问题描述】:
我正在使用 Spring jdbcTemplate.update(String sql, Object[] args) 在 Oracle 数据库上执行准备好的插入语句。其中一个对象是包含值“Y”的字符对象,目标列是 CHAR(1) 类型,但我收到一个
java.sql.SQLException: Invalid column type
异常。
我已经前后调试过,毫无疑问,正是这个特定的对象导致了问题。当省略此字符对象时,插入将按预期执行。
我也可以输出sql和Object[]的值,将sql复制到sql developer,将值占位符(?'s)替换成Object的实际值,插入就可以正常工作了。
sql(混淆以保护有罪):
INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (?,?,?,?);
对象值:
values[0] = [123]
values[1] = [Some String]
values[2] = [2012-04-19]
values[3] = [Y]
组合在 sql developer 中手动运行,效果很好:
INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (123,'Some String','19-Apr-2012','Y');
准备好的语句 sql 本身是根据数据传输对象中包含的非空实例变量对象动态生成的(我们希望数据库处理默认值的生成),所以我不能接受任何暗示我的答案只需重新编写 sql 或插入例程即可。
有没有人遇到过这种情况,可以向我解释发生了什么以及如何解决它?令人沮丧的是,我似乎无法将 Character 对象插入 CHAR(1) 字段。任何帮助将不胜感激。
此致,长期潜伏者首次海报
【问题讨论】:
标签: java spring character jdbctemplate