我是JDBC新手,在执行某些查询时,我得到的结果不一致。
如果我在sql developer(连接到Oracle DB)中执行此查询,我会得到4个结果
SELECT *
FROM someTable1 some1
JOIN someTable2 some2 on (some1.some_id= some2.other_id)
WHERE some2.some_date LIKE '01/01/01' OR some2.some_date IS NULL
然后,我从java中的属性文件加载相同的查询并执行查询并获得0结果...任何人都知道为什么会发生这种情况?我首先怀疑属性值中的单引号,但我不知道......
提前致谢并原谅我可怜的英语! :)
答案 0 :(得分:2)
查询不包含任何可能混淆Java,属性加载器或JDBC的特殊字符,因此您应该在SQL Developer和JDBC中获得完全相同的结果。
事实上,SQL Developer是用Java编写的,所以它使用JDBC来执行查询。
在执行查询之前将查询打印到控制台,以100%确保代码执行您想到的查询。
接下来,您应该检查some_date
的类型。 LIKE
仅针对字符串类型(VARCHAR
和类似字段)定义,而不是针对日期/时间类型。
Oracle有一组辅助函数来构建日期/时间类型的查询,例如:
some_date = to_date( '01/01/2001','mm/dd/yyyy')
或
TRUNC(some_date, 'DAY') = to_date( '01/01/2001','mm/dd/yyyy')
第二个查询从列中删除小时,分钟,秒等,并且仅比较天,月和年。
注意:始终使用4位数年份以避免各种奇怪的问题。