我想和SQL函数没有什么关系吧,因为如果JDBC并不去管你用了哪些函数,也就是说,如果
某一SQL语句在数据库可以运行,那么就可以在JDBC中执行。
我只觉得JDBC的返回值会因数据库不同而不同,这个我是遇见过的。

解决方案 »

  1.   

    除了尽量少使用非标准sql外,没有很好的解决方法
    如果你的java程序要移植到不同的后台数据库上,不修改代码是完全不可能的,你的driver和connection string总要改的吧
    碰到特定函数只有修改没有办法
    而返回值不一样可以先转换成为某一个java类,然后再作别的处理
    我的程序中碰到的日期的问题就是这样解决的
      

  2.   

    to stellaxyq:
       当然driver和connection是要改的,但是对于特定函数,我觉得这是jdbc作的事,你可以
    举个具体例子说明吗?假如某sql语句有oracle的特定函数,那么这个sql在sqlserver就会出错,那么看SQLException就行了。
       我不知道你说的是不是这个意思,把某一数据库的特定函数转换成其他数据库的特定函数。
    我觉得这样没有必要,对于select count(field1),field2,field3 from table group by 
    field1这个语句来说,有的数据库可以运行,有的数据库group by后面加上所有查询字段才可以
    运行,对于这样的情况,那是不是要程序每次都要解析sql,这样会使效率很差,得不偿失。
       总之,我觉得使用者必须有一定的限制,这是当时我们公司作需求时得出的结论。请
    stellaxyq指教。
       
      

  3.   

    加一层中间代码
    例如时间的问题,sql server用#2001-1-1#来表示时间,可用作比较
    而oracle 要求转换 to_date(2001-1-1,'yyyy-mm-dd')才表示时间这样你可以写一个中间函数,在程序中可以用String(或别的)来表示时间字串
    遇到要和数据库交互前用parseDate(String date)来代替原来的date
    parseDate根据不同的数据库把他转换成不同的表示方法,也可以一个数据库写一个类专门作这种转换,使用那各类由property的配置文件决定