【问题标题】:Error Inserting Java Character object value into Oracle CHAR(1) column将 Java 字符对象值插入 Oracle CHAR(1) 列时出错
【发布时间】: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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-16
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 2012-03-07
      • 2019-12-23
      相关资源
      最近更新 更多