Java 在需要数字的位置找到了非数字字符

Java 在需要数字的位置找到了非数字字符,java,plsql,Java,Plsql,我得到了错误的答案 ORA-01858:在需要数字的位置找到非数字字符 对于Eclipse中的查询,但同一查询在Toad中运行良好 我试着把日期改成_char 如果没有看到您的数据库架构,我会说这看起来很可疑: SRC_RECORD_NUM IN('3','6') 我个人永远不会声明带有_NUM后缀的字符字段,但是您的IN子句正在传递字符数据。我打赌你需要做: SRC_RECORD_NUM IN (3,6) 但我的猜测完全基于字段的名称。问题很可能是您指定日期的方式 如果您没有提供正确的日期

我得到了错误的答案

ORA-01858:在需要数字的位置找到非数字字符

对于Eclipse中的查询,但同一查询在Toad中运行良好

我试着把日期改成_char


如果没有看到您的数据库架构,我会说这看起来很可疑:

SRC_RECORD_NUM IN('3','6')
我个人永远不会声明带有_NUM后缀的字符字段,但是您的IN子句正在传递字符数据。我打赌你需要做:

SRC_RECORD_NUM IN (3,6)

但我的猜测完全基于字段的名称。

问题很可能是您指定日期的方式

如果您没有提供正确的日期文字,那么Oracle正在使用您的NLS_date_格式进行从文本到日期的隐式转换,这可能不是您所期望的

替换此项:

String query3 = "SELECT TXN_DATETIME FROM S3_ANTI_MONEY_LAUNDERING_TDS WHERE TRUNC(ROW_LOADED_DATE_TIME)='30-OCT-2018' AND SRC_FEED_NUM='63' AND BANK_ID IN('ISPP') AND SRC_RECORD_NUM IN('3','6')";
为此:

String query3 = "SELECT TXN_DATETIME FROM S3_ANTI_MONEY_LAUNDERING_TDS WHERE TRUNC(ROW_LOADED_DATE_TIME) = DATE '2018-10-30' AND SRC_FEED_NUM='63' AND BANK_ID IN('ISPP') AND SRC_RECORD_NUM IN('3','6')";
在Oracle中执行日期文字的正确方法如下:

日期“yyyy-mm-dd”

时间戳'yyyy mm dd hh24:mi:ss'

当然,您可以在以下语法中使用任何掩码:

截止日期“2018-10-30 00:00:00”,“YYYY-MM-DD HH24:MI:SS”


最后,如果您的代码正在动态构建该查询,那么最好使用绑定变量和准备好的语句。只需确保您熟悉Java日期和时间戳与Oracle日期和时间戳之间的细微差别。

S3\u ANTI\u MONEY\u Launing\u TDS中列的数据类型是什么?这里有些不完全正确。JDBC只是将您的查询字符串直接传递给Oracle MySQL?,因此,如果上述查询直接在您的数据库上工作,它也应该从您的Java代码中工作。您能否在eclipse中提供此查询的结果:从dual中选择日期为“2018年10月30日”
String query3 = "SELECT TXN_DATETIME FROM S3_ANTI_MONEY_LAUNDERING_TDS WHERE TRUNC(ROW_LOADED_DATE_TIME) = DATE '2018-10-30' AND SRC_FEED_NUM='63' AND BANK_ID IN('ISPP') AND SRC_RECORD_NUM IN('3','6')";