日期:2014-05-20  浏览次数:20588 次

关于classes12.jar是如何调用Oracle的sql
目前我们遇到这样一个情况,Oracle上有一个生成View的Sql,其中有一个where条件:StartDate > '2006-01-01',其中DB中的StartDate是Date型的,DB服务器是windows的,奇怪的是用windows系统作Web服务器,则可以正常执行,用Solaris10系统作Web服务器就出现类型转换异常。
把该where条件改成TO_CHAR(StartDate, 'YYYY-MM-DD') > '2006-01-01'则正常。

我们是在windows下开发而后要求在Solaris10下正常运行,与以上问题类似的情况很多,不明白为什么在不同的应用系统下访问相同的DB服务器,并执行相同的SQL结果会不同,所使用之classes12.jar也是相同的。

以上,已经调查很久了,但没能找到太多有用的东西,如果可以,请帮忙解释一下。谢谢

------解决方案--------------------

------解决方案--------------------
我们的是DB在Solaris10下
开发在windows下,出现的情况和你的恰好相反
在windows下用StartDate > '2006-01-01'查询出异常,而在Solaris10没有问题

我想会不会是因为Date型在windows和Solaris10的系统平台下格式不同
结果在跨平台访问时出现类型转换异常

而相同平台下则不用转换
------解决方案--------------------
where条件改成TO_CHAR(StartDate, 'YYYY-MM-DD') > '2006-01-01'则正常。

这个是标准用法,不用猜测了。

1 用to_char
2 用 PreparedStatement 然后setDate() 进行赋值

推荐第二种
------解决方案--------------------
可以采用to_date():where startdate>to_date('20060101','yyyymmdd'),在字段上使用函数不是一种很好的习惯,这种情况下,oracle不会使用索引来进行查找,除非使用函数索引,否则sql语句执行效率不高.
在不同系统中的情况不同,是由于oracle连接的默认日期格式不同造成的
------解决方案--------------------
oracle上日期不经常用to_xxx来转换么?