将Java字符对象值插入Oracle CHAR(1)列时出错
我使用Spring将Java字符对象值插入Oracle CHAR(1)列时出错,java,spring,character,jdbctemplate,Java,Spring,Character,Jdbctemplate,我使用SpringjdbcTemplate.update(stringsql,Object[]args)在Oracle数据库上执行准备好的insert语句。其中一个对象是包含值“Y”的Character对象,目标列是CHAR(1)类型,但我收到一个 java.sql.SQLException: Invalid column type 例外 我已经对它进行了前后调试,毫无疑问,正是这个特定的对象导致了这个问题。当省略此字符对象时,插入将按预期执行 我还可以输出sql和Object[]值,将sql
jdbcTemplate.update(stringsql,Object[]args)
在Oracle数据库上执行准备好的insert语句。其中一个对象是包含值“Y”的Character对象,目标列是CHAR(1)类型,但我收到一个
java.sql.SQLException: Invalid column type
例外
我已经对它进行了前后调试,毫无疑问,正是这个特定的对象导致了这个问题。当省略此字符对象时,插入将按预期执行
我还可以输出sql和Object[]值,将sql复制到sqldeveloper中,用对象的实际值替换值占位符(?)
,插入将正常工作
sql(经过模糊处理以保护罪犯):
对象值:
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)字段。任何帮助都将不胜感激
诚恳地说,Longtime Lower First time Poster没有接受字符值的PreparedStatement.setXxx(),Oracle文档声明所有JDBC字符类型都映射到Java字符串。另外,请参阅,其中不包括从Java
char
或Character
到JDBC类型的映射
您必须将该值转换为字符串
INSERT INTO SCHEMA.TABLE(NUMBER_COLUMN,VARCHAR_COLUMN,DATE_COLUMN,CHAR_COLUMN) VALUES (123,'Some String','19-Apr-2012','Y');