用oledb odbc ado等来访问数据库,已经使得各种数据之间的差异被大大缩小了,但是还是有一些差异存在的,例如SQL Server可以写 select top 1.....,Oracle只能写 where rownum=1,还有SQL Server写 where my_date_col='2004-03-28 14:53:00'可是Oracle就要写成where my_date_col=TO_DATE('2004-03-28 14:53:00','YYYY-MM-DD HH24:MI:SS'),等等诸如此类的差异,如何屏蔽?java有像JDO这样的东西,c++要怎么做呢?请问各位在实践中又是怎么做的呢?有没有某种支持面向对象的查询语言支持c++?
欢迎各位前来讨论,谢谢

解决方案 »

  1.   

    我一直用ORACEL和ACCESS
    但我觉得可以写一个类来处理这种情况
    选得到后台数据库的类别,
    然后再转化SQL语句。。如SQL就可以用TOP是ORACLE就转成ROWNUM=1
    不过我觉得会很麻烦,,而且可能算法会比较复杂吧。。
      

  2.   

    当然有了,有面向对象数据库系统啊!不过国内外都处于起步阶段!如PowerBuilder等等
      

  3.   

    数据库系统还是SQL Server、Oracle、DB2等等不会变,关键是有没有类似JDO用的OQL这样的查询语言的c++实现
      

  4.   

    我目前只能是在下面做字符串的查找替换,如果单引号内的字符是一个日期时间形式的,就替换成TO_DATE('2004-03-28 14:53:00','YYYY-MM-DD HH24:MI:SS')这样的形式,问题是这样效率太低,而且扩展性差,发现一个SQL语句有不同,就要再写一个替换的函数。有没有更好的解决办法呢?
      

  5.   

    通用的查询好像还可以,如果想对数据库查询作优化就有点难了!
    个别的sql语句可以针对数据库做一些改动。
      

  6.   

    这些问题完全可以在设计数据库的时候搞定
    比方说时间,哪个让你用时间表示了,用长整数表示,又方便有快
    比方说bool型,用short int表示
    至于其他的差异就很少了
      

  7.   

    做个库吧,判断数据库,或全用些标准的SQL