JDBC与LIKE不一致

时间:2013-01-07 15:18:20

标签: jdbc sql-like

我是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结果...任何人都知道为什么会发生这种情况?我首先怀疑属性值中的单引号,但我不知道......

提前致谢并原谅我可怜的英语! :)

1 个答案:

答案 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位数年份以避免各种奇怪的问题。