如鵬網 大學生計算機學習社區

          CowNew開源團隊

          http://www.cownew.com 郵件請聯系 about521 at 163.com

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks
          CowNewSQL多數據庫翻譯器在線演示已經開發完成,歡迎體驗
          http://211.99.196.18:6666/cownewdemo

          由于訪問人數眾多,如果暫時無法訪問,請稍后再試。
          目前已經支持SQLServer、DB2、MySQL、Oracle四種數據庫管理系統。
          CowNewSQL源碼和二進制包可以從CowNew網站(http://www.cownew.com )下載。
          **********************************************
                 由于種種原因,各個數據庫系統的SQL語句語法以及支持的函數都不盡相同,這造成了如下兩個問題:(1)使得系統在多個不同數據庫之間移植變得非常困難,特別是需要維護多個數據庫版本的時候;(2)開發人員必須對各種數據庫的語法差異非常了解,這加大了開發難度。

                 雖然Hibernate通過HQL等技術部分的解決了跨數據庫移植的問題,但是在對性能要求比較高的場合還是需要直接使用SQL語句訪問數據庫的,在這種情況下如何編寫能被不同數據庫支持的SQL語句就成了。目前解決這種差異的最常用的技術就是SQL語句翻譯,使用SQL翻譯器可以將SQL語句翻譯為在不同的數據庫中支持的特定平臺的SQL語句。CowNewSQL就是這樣一款產品。

                 CowNewSQL簡化了跨數據庫產品的開發,比如取當前日期在MSSQL中是“SELECT GETDATE()”,在MYSQL中是“SELECT NOW()”,在Oracle中是“SELECT SYSDATE FROM DUAL”,使用CowNewSQL以后您只要使用“SELECT NOW()”,那么CowNewSQL就會為您自動將其翻譯為對應數據庫平臺支持的SQL語句,而且CowNewSQL的兼容性也非常好,比如“SELECT NOW()”寫成“SELECT GETDATE()”同樣可以被正確的翻譯;取數據庫前10條記錄,在MSSQL中是“Select top 10 from T_1”、在MYSQL中是“SELECT  LIMIT 0, 10 ”、在Oracle中是“SELECT  FROM DUAL WHERE ROWNUM <= 10”,使用CowNewSQL以后您只要使用“Select top 10 from T_1”,那么CowNewSQL就會為您自動將其翻譯為對應數據庫平臺支持的SQL語句。

                 CowNewSQL還通過變通的方式對目標數據庫不直接支持的語法進行了支持。比如MYSQL是不支持“select * from t1 where fid in(select fid from t2 limit 0,5)”這樣在子查詢中的Limit語句的,CowNewSQL通過將子查詢進行二次結果集包裝的方式巧妙的對其進行了支持,“delete from T_SaleInvoice where FId in(select top 5 FParentId from T_SaleInvoiceDetails)”通過CowNewSQL的翻譯以后就成了“DELETE FROM T_SaleInvoice WHERE FId IN (select * from(SELECT FParentId FROM T_SaleInvoiceDetails LIMIT 0, 5 ) t_temp_sub)”這樣被MYSQL支持的語法了;MYSQL中沒有提供計算兩個日期之間月份差異的函數,CowNewSQL通過組合其他日期函數的方式模擬了這個函數,這樣使用者只要使用MONTHS_BETWEEN函數即可了,無需關心內部的差異。

                 CowNewSQL支持如下幾種類型的SQL語句:CreateTable/DropTable/CreateIndex/DropIndex/Select/Insert/Delete/Update;支持子查詢、JoinUnion等高級的SQL特性;支持日期(包括取當前日期、從日期中提取任意部分、計算日期差異、日期前后推算等)、數學(包括取絕對值、取PI值、四舍五入、對數計算、隨機數等)、字符串(包括取子字符串、取字符串長度、字符串截斷、大小寫轉換等)、基本數據處理(包括數字字符串互轉、日期轉字符串、非空判斷等)等函數。

          posted on 2007-10-21 23:39 CowNew開源團隊 閱讀(1394) 評論(10)  編輯  收藏

          評論

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-10-22 09:19 驚鴻逝水
          是否支持Oracle 的Start With..... Connect by......?  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-10-22 11:12 BeanSoft
          非常不錯 支持了!  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-10-22 12:03 kitsionlee
          關注,支持  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-10-22 19:58 CowNew開源團隊
          @驚鴻逝水
          暫時不支持。我們會研究是否能在其他DBMS上模擬此語法,如果可以的話,我們會在后面的版本中對其提供支持。  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-11 19:40 驚鴻逝水
          @CowNew開源團隊

          簡單用了一下,也不支持:
          SELECT * FROM (SELECT rownum n, a.* FROM (SELECT * FROM t_user )a WHERE rownum<=?) WHERE n>?

          語句?  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-13 17:15 驚鴻逝水
          也不支持select語句包含括號,函數,
          select max(a1) from table

          //MSSQLServer翻譯結果
          SELECT max(a1)
          //MYSQL翻譯結果
          SELECT max(a1)
          //Oracle翻譯結果
          SELECT max(a1) FROM DUAL
          //DB2翻譯結果
          SELECT max(a1) FROM SYSIBM.SYSDUMMY1

          語法解析器考慮不周全,希望能盡早修復這些BUG


            回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-13 17:19 CowNew開源團隊
          @驚鴻逝水
          "table"是SQL的關鍵字,所以不能用作表名,改為比如“select max(a1) from table1”就可以了。
          “SELECT * FROM (SELECT rownum n, a.* FROM (SELECT * FROM t_user )a WHERE rownum<=?) WHERE n>?”這個請使用SQLServer的TOP語法,可以參考在線演示中的【樣例】→【特色語法】→【取結果集前N條】。
          感謝你的建議,:)。  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-13 17:23 驚鴻逝水
          @CowNew開源團隊

          我看看了你們的sqltreeparser.g,from_clause 只支持table_elements,不支持select_elements ,所以使用SELECT rownum n, a.* FROM (SELECT * FROM t_user ) 出異常

          本來我想修改一下,但發現
          #(FROM_CLAUSE (table_element|select_elements)+) 也不正確,呵呵  回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-13 17:28 CowNew開源團隊
          @驚鴻逝水
          CowNewSQL是支持from_clause中的select_elements 。“SELECT rownum n, a.* FROM (SELECT * FROM t_user ) ”這句話不能正確翻譯主要有如下兩個原因:
          (1)rownum 是關鍵字,所以不能用作列名。這個問題我們會在后續版本修改,只支持Top語法,這樣解析也會快一點。不知是否可以?
          (2)暫不支持a.*這樣的表后的“*”,只支持,select * from ....。

          改成“SELECT aa n, a.id,a.name FROM (SELECT * FROM t_user )”就可以通過翻譯了。
            回復  更多評論
            

          # re: CowNewSQL多數據庫翻譯器在線演示 2007-11-13 17:38 驚鴻逝水
          very good!謝謝!

          希望在后續版本可以看到這些改進:)

          記得到時候通知一聲啊,呵呵,十分感謝答復*-* 繼續關注!  回復  更多評論
            


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 衡南县| 永康市| 滕州市| 抚顺市| 荣成市| 贵定县| 虞城县| 长泰县| 定结县| 光泽县| 长垣县| 宁远县| 敦煌市| 拜城县| 双江| 闸北区| 东乌珠穆沁旗| 钦州市| 祁阳县| 江门市| 丰县| 满城县| 榕江县| 梅州市| 北京市| 广河县| 平远县| 手游| 什邡市| 绥中县| 陆河县| 云霄县| 怀集县| 平塘县| 阳泉市| 辽源市| 洛扎县| 方山县| 文安县| 龙州县| 铅山县|