4

我正在使用 SpringjdbcTemplate.update(String sql, Object[] args)在 Oracle 数据库上执行准备好的插入语句。其中一个对象是包含值“Y”的字符对象,目标列是 CHAR(1) 类型,但我收到一个

java.sql.SQLException: Invalid column type

例外。

我已经前后调试了这个,毫无疑问,这是导致问题的一个特定对象。当省略此字符对象时,插入按预期执行。

我还可以输出 sql 和 Object[] 值,将 sql 复制到 sql developer 中,将值占位符替换(?'s)为 Objects 的实际值,插入将正常工作。

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) 字段。任何帮助将非常感激。

真诚的,长期潜伏者第一次海报

4

1 回答 1

2

没有 PreparedStatement.setXxx() 接受字符值,并且 Oracle 文档指出所有 JDBC 字符类型都映射到 Java 字符串。此外,请参阅http://docs.oracle.com/javase/1.3/docs/guide/jdbc/getstart/mapping.html#1039196,其中不包括从 JavacharCharacter到 JDBC 类型的映射。

您必须将值转换为字符串。

于 2012-05-24T23:40:39.617 回答