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

          CowNew開源團隊

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            363 隨筆 :: 2 文章 :: 808 評論 :: 0 Trackbacks

          本版主要新增特性:
            1、對Show語句的支持

                 自從CowNewSQL2.1開始,我們提供了對Show語句的支持,主要用來查看系統中的表定義、字段定義、支持的函數等。由于各個數據庫中取得這些元信息的方式各有不同,經常需要關聯查詢很多系統表才能搬到,為了簡化用戶的使用,我們創新性的設計了Show系列語句,這樣您至少使用非常短的語句就可以實現以前需要編寫很復雜的語句才能實現的功能。

                 Show語句語法列表:

          1show  tables:顯示系統中默認Schema下的所有表的表名。

          2show  tables Schema名:顯示指定Schema下的所有表的表名。例子:show tables DEMO

          3show  functions:顯示系統支持的函數的列表。

          4show  functioncolumns:顯示系統支持的函數參數以及返回值的詳細說明。

          5show  tablecolumns 表名:顯示指定表的數據列信息。例子:show  tablecolumns table_1。
          2、提供了JDBC驅動的使用方式 

                 自從CowNewSQL2.1開始,我們提供了以JDBC驅動方式使用的支持(支持最新的JDBC4.0標準)。通過這種方式用戶無需修改系統的任何代碼,只要修改原有的JDBC連接字符串就可以輕松的將CowNewSQL融入系統,使用CowNewSQLJDBC驅動后系統中所有的SQL語句在送到數據庫系統中執行前都將會自動進行翻譯。

                 CowNewSQLJDBC驅動類為:com.cownew.cownewsql.imsql.jdbc.DBDriver;連接字符串格式為:jdbc:cownewsql:目標數據庫類型:目標數據庫JDBC驅動類:JDBC連接字符串。

          使用方式舉例:

                 原有程序連接到Oracle數據庫,使用的Oracle驅動類為oracle.jdbc.driver.OracleDriverJDBC連接字符串為:jdbc:oracle:thin:@192.168.88.128:1521:XE

                 我們只要將CowNewSQLJar包(包括cownewsql***.jarantlr.jarcommons-lang**.jarretrotranslator-runtime**.jar等)加入程序的ClassPath,然后修改使用的數據庫驅動為:com.cownew.cownewsql.imsql.jdbc.DBDriver,然后修改JDBC連接字符串為:jdbc:cownewsql:oracle:oracle.jdbc.driver.OracleDriver:jdbc:oracle:thin:@192.168.88.128:1521:XE

                 這樣我們無需修改任何代碼就將CowNewSQL翻譯器輕松的植入了原有系統。
          3、增加了對Alter Table語句的支持;修正了Convert函數在各個數據庫中取值范圍不一致的Bug;改進了方言管理器的實現機制;修復了若干Bug。

          下載地址1:http://www.aygfsteel.com/Files/huanzhugege/cownewsql-2.1.zip
          下載地址2:http://www.cownew.com/Soft/UploadSoft/cownewsql-2.1.zip


          =======================================================================================
           

                 由于種種原因,各個數據庫系統的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/AlterTable/DropTable/CreateIndex/DropIndex/Select/Insert/Delete/Update/Show;支持子查詢、JoinUnion等高級的SQL特性;支持日期(包括取當前日期、從日期中提取任意部分、計算日期差異、日期前后推算等)、數學(包括取絕對值、取PI值、四舍五入、對數計算、隨機數等)、字符串(包括取子字符串、取字符串長度、字符串截斷、大小寫轉換等)、基本數據處理(包括數字字符串互轉、日期轉字符串、非空判斷等)等函數。

          posted on 2007-11-17 15:27 CowNew開源團隊 閱讀(2926) 評論(10)  編輯  收藏

          評論

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-11-18 12:52 專注JAVA開源
          下載地址1:http://www.aygfsteel.com/Files/huanzhugege/cownewsql-2.1.zip
          下載地址2:http://www.cownew.com/Soft/UploadSoft/cownewsql-2.1.zip
          這兩個地址下載不了  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-11-18 13:49 CowNew開源團隊
          @專注JAVA開源
          是不是您的網絡有問題?我這可以下載,找了幾個朋友試了一下也可以下載。  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-11-19 17:10 溫少的日志
          下載看了一下,似乎做的內容還是相當少。

          建議你參考一下金蝶軟件EAS BOS的KSQL,是一個應用在產品中的成熟的SQL翻譯。單是測試用例就有數千個,支持Oracle、Microsoft SQL Server、Sybase、DB2、DB2 AS400。手工編寫的文法分析,沒有使用antlr,速度大約是antlr生成Parser的三至四倍左右吧。

          KSQL的功能也比較完備,支持臨時表、游標、流程控制語句WHILE、IF等。

          這樣的底層核心模塊關鍵是穩定、高效、功能完備。高效還容易,穩定是最難的,需要大量的測試,包括實際應用中的測試,DB2的限制是最多的,你沒有實際測試,可能想不到DB2的限制有如此之多。

          我覺得你現在這三點都不具備。  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-11-19 17:42 CowNew開源團隊
          多謝溫少指教,:)
          1、暫時沒有手工編寫的文法分析的打算,因為考慮到數據庫操作和SQL翻譯的速度比起來不在一個檔次上,提高SQL翻譯的速度并不會有明顯的性能提升。Antlr挺好用的,等到以后發現有性能瓶頸的時候會再考慮用手工編寫的文法分析。
          2、CownewSQL也計劃在未來支持通用的存儲過程。
          3、DB2確實很討厭,很多其他主流數據庫支持的特性它都不支持,它竟然還是關系數據庫的祖宗,看來祖宗就代表著守舊呀,呵呵。
          再次感謝溫少的指教,以后還請高手多提寶貴意見!  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-12-19 13:03 likaijin
          我按照以上的步驟說明用拉一下,出現以下錯誤:
          2007-12-19 12:52:48,448 ERROR [http-8088-Processor23] (cn.com.headsoft.database.OperateDB:53) - 無法取得數據庫連接:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.cownew.cownewsql.imsql.jdbc.DBDriver'
          java.lang.NullPointerException
          at cn.com.headsoft.database.OperateDB.executeQuery(OperateDB.java:75)
          at cn.com.headsoft.common.dao.impl.SqlUserLoginDAO.validateUser(SqlUserLoginDAO.java:97)
          at cn.com.headsoft.common.action.UserLoginAction.execute(UserLoginAction.java:38)
          at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
          at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
          at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1480)
          at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:524)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
          at cn.com.headsoft.common.filter.CheckSessionFilter.doFilter(CheckSessionFilter.java:109)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
          at cn.com.headsoft.common.filter.EncodingFilter.doFilter(EncodingFilter.java:43)
          at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
          at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
          at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
          at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
          at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
          at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
          at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
          at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
          at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825)
          at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
          at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
          at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
          at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
          at java.lang.Thread.run(Thread.java:595)
          我用的是sqlserver2000數據庫,直接在Tomcat服務器的server.xml中對數據源進行配置:
          <Context path="/cost1" docBase="D:\eclipse\workspace\WZProject_V1\WebContent" debug="0" reloadable="true">
          <Resource name="ProjectDataSource"
          auth="Container"
          type="javax.sql.DataSource"
          maxActive="100"
          maxIdle="30"
          maxWait="10000"
          username="sa"
          password="sasa"
          driverClassName="com.cownew.cownewsql.imsql.jdbc.DBDriver"
          url="jdbc:cownewsql:net.sourceforge.jtds.jdbc.Driver:jdbc:jtds:sqlserver://192.198.64.168:1433/headcost"/>
          </Context>  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-12-19 13:07 CowNew開源團隊
          @likaijin
          請確保“CowNewSQL的Jar包(包括cownewsql***.jar、antlr.jar、commons-lang**.jar、retrotranslator-runtime**.jar等)加入程序的ClassPath”。  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-12-19 14:00 likaijin
          我改為連接池配置方式:
          <?xml version="1.0" encoding="GBK"?>
          <!-- the proxool configuration can be embedded within your own application's.
          Anything outside the "proxool" tag is ignored. -->
          <something-else-entirely>
          <proxool>
          <alias>SQLServerDB</alias>
          <driver-url>jdbc:cownewsql:sqlserver:net.sourceforge.jtds.jdbc.Driver:jdbc:jtds:sqlserver://127.0.0.1:1433/www</driver-url>
          <driver-class>com.cownew.cownewsql.imsql.jdbc.DBDriver</driver-class>

          <driver-properties>
          <property name="user" value="sa"/>
          <property name="password" value="sasa"/>
          </driver-properties>
          <maximum-connection-count>400</maximum-connection-count>
          <house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
          </proxool>
          </something-else-entirely>
          已經不報錯誤,但后臺sql編譯還是有點問題,而且速度有些慢,這幾個包我都直接放到我的工程WEB-INF/lib/文件夾下拉,應該是沒有問題的,但還是看不到效果。。。。  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2007-12-19 14:18 CowNew開源團隊
          后臺sql編譯有什么問題???
          你執行一下“select trim(' a b ')”,看看能不能得到“a b”,如果可以的話就說明沒問題。  回復  更多評論
            

          # re: 多數據庫翻譯器CowNewSQL 2.1 發布 2008-06-06 10:41 fire9
          不錯的東西啊!支持!  回復  更多評論
            

          # CowNewSQl 臨時表 2009-02-27 15:55 ysj
          CowNewSQl 臨時表和字符字段的連接無法翻譯!  回復  更多評論
            


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


          網站導航:
           
          主站蜘蛛池模板: 蓬莱市| 漠河县| 都匀市| 郸城县| 天峨县| 天气| 宣汉县| 乌拉特前旗| 荥经县| 芜湖县| 郓城县| 佛坪县| 大洼县| 抚州市| 永修县| 宁津县| 湘乡市| 鹿邑县| 柘城县| 建湖县| 长子县| 刚察县| 华亭县| 晋中市| 黄平县| 寿光市| 库车县| 通河县| 德庆县| 侯马市| 谷城县| 喀喇沁旗| 祁阳县| 拜城县| 青阳县| 治县。| 凭祥市| 桐梓县| 达州市| 高清| 辉南县|