JDBC / Oracle在没有preparedStatement

时间:2015-11-18 08:58:19

标签: java oracle jdbc

我有一个非常令人困惑的问题,我不明白。 我正在为不同的表构建INSERT语句,并在最后将它们作为Batch执行。

语句构建如下:

INSERT INTO table VALUES ('anyValue', 'anyValue', 'anyValue', ...)

表定义不仅包含varchar,还有number,float和timestamp,但它根本不重要,因为Oracle自己进行类型转换

BUT ... 如果我尝试在NUMBER中插入NULL,则表示无效数字,但是例如在PLSQL开发人员中,它就像魅力一样。看起来像这样:

INSERT INTO table (varchar, varchar, number, ...) VALUES ('value', 'value', NULL, ...)< - 不起作用,但为什么?

我正在使用带有ojdbc6.jar库的Oracle11g数据库。 我知道上面的语法不正确,但它只是为了澄清类型和我尝试插入的内容。

有没有解决方法,没有使用preparedStatement和setNull(),因为我不知道运行时的字段类型

修改

INSERT ALL  INTO comediatypeadjustments VALUES('1','TEST','1','DEL_COC_361','DEL_COC_361','100','Y','Y','N','GREEN','Y','Y','N','N','LIGHTGREEN','STD','10.65','STD','55.25','N','N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'Y','WHITE','STD_BOLD_UL','44.25',NULL,NULL,'N','N','N',NULL,'N',NULL,'N',NULL,'N',NULL,NULL,NULL,NULL,'Y','N') INTO comediatypeadjustments VALUES('2','TEST','2','DEL_COC_362','DEL_COC_362','100','Y','Y','N','BLUE','Y','Y','N','N','LIGHTGREEN','STD','10.65','STD','55.25','N','N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'N',NULL,NULL,NULL,NULL,'Y','WHITE','STD_BOLD_UL','44.25',NULL,NULL,'N','N','N',NULL,'N',NULL,'N',NULL,'N',NULL,NULL,NULL,NULL,'Y','N') SELECT * FROM DUAL
  

线程中的异常“main”java.sql.BatchUpdateException:Fehler bei   Stapelverarbeitung aufgetreten:ORA-01722:无效数字

     

在   oracle.jdbc.driver.OracleStatement.executeBatch(OracleStatement.java:4586)     在   oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:230)     在   de.draexlmaier.pcm.test.testcase.TestCaseHelper.initializeTestData(TestCaseHelper.java:285)     在   de.draexlmaier.pcm.test.testcase.TestCaseHelper.setTestName(TestCaseHelper.java:118)     at de.draexlmaier.pcm.test.utilities.Main.main(Main.java:19)

2 个答案:

答案 0 :(得分:0)

由于您使用的是Java,我想列和插入的值会有一些映射问题。请先指定列名,然后输入

之类的值
insert into <table>(column_1,column_2,column_3,...) values(val1,val2,val3...); 

答案 1 :(得分:-1)

您可以尝试空字符串&#39;&#39; oracle db会将其视为空。