spark的自留地(ofbiz/eclipse rcp/shark/opentaps)

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            54 Posts :: 0 Stories :: 112 Comments :: 0 Trackbacks

          我的產品是被要求運行在多種常見數據庫平臺下(mysql/sqlserver/oracle)下,在開發中需要嚴格遵循相關的規范以確保能夠實現跨數據庫類型的要求.(相關的要點在我的"你的系統真的因為使用hibernate就可以適應各種數據庫嗎? "一文中已提及).在初始開發時有一個問題是比較困擾我的團隊的,我們開發的時候必定是基于某個特定的數據庫開發的(比如mysql),但在測試階段是需要在不同的數據庫平臺下進行兼容性測試,由于開發過程中數據庫結構與種子數據變化非???全部編寫sql方式非常浪費時間,如何能找到一種高效的數據庫相互遷移的工具,是我們當時所急需的解決方案.

          其實也沒啥選擇,比較常用的數據庫遷移工具就是Sqlserver自帶的DTS,這玩意在sql server數據庫間進行數據導入/導出時倒確實比較好用,在不同數據庫類型進行操作時,就會出多多問題,如:類型轉換需手工指定/導出字段有雙引號...

          所以最后的選擇就是自己做一個DTS好啦,思路如下:
          1、選擇源數據庫連接與目標數據庫連接
          2、根據源數據庫遍歷所有數據庫對象(表),做為基準
          3、刪除目標數據庫所有表外鍵及索引、刪除所有種字數據(根據約定)數據、字段均允許null
          4、遍歷源數據庫中所有表,為目標數據庫修改結構(如增刪字段,字段改類型、大小)
          5、將源數據庫中種子數據表數據拷貝至目標數據庫中
          6、根據源數據庫為目標數據庫中的表創建外鍵及索引、設置是否允許為null
          7、搞掂!

          完工后總代碼量不過兩千行(因為需考慮不同數據庫的SQL Dialet,否則應該更少)

          用戶界面基于Eclipse RCP技術開發,使用JFace Wizard向導(如果不是想用向導的話,你可以用SWT來做)對話框獲得源數據庫與目標數據庫的連接內容,并在用戶點擊完成按鈕后,在進度條中提示用戶執行情況.用了這個玩意以后,測試同事的數據庫兼容性測試就再也不用來煩我們開發組啦!真是爽呀!當然很多喜歡折騰的客戶(比如突然在哪里聽說oracle是大型數據庫,非讓你幫他弄過去)此類朝三暮四也就自然不在話下啦!


          數據庫遷移向導屏幕一

          數據庫遷移向導屏幕二

          數據庫遷移向導屏幕三

          本人原創文章,歡迎轉載,轉載請注明出處!
          posted on 2008-10-27 14:22 shanghai_spark 閱讀(1478) 評論(3)  編輯  收藏 所屬分類: eclipse rcp

          Feedback

          # re: DTS不好用?拿Eclipse RCP做個自己的數據庫遷移工具 2008-10-28 09:52 于翔
          呵呵 不錯!  回復  更多評論
            

          # re: DTS不好用?拿Eclipse RCP做個自己的數據庫遷移工具 2008-10-28 22:57 duxu
          代碼呢  回復  更多評論
            

          # re: DTS不好用?拿Eclipse RCP做個自己的數據庫遷移工具 2009-04-15 18:40 fykenny
          我是基于WIZARD寫的,但是,遇到了問題,就是要有進度條,而且插數據要后臺非UI線程,而且,操作什么表要在向導的最后那個頁面中的TEXTBOX中動態顯示出來? 遇到了UI線程與非UI線程的問題

          怎么辦?

            回復  更多評論
            

          主站蜘蛛池模板: 博乐市| 通山县| 石狮市| 贵阳市| 托克逊县| 长子县| 阳春市| 海盐县| 瓮安县| 濮阳县| 诸城市| 新邵县| 射洪县| 麦盖提县| 泗水县| 临邑县| 砀山县| 宁阳县| 沂南县| 晋城| 桃园市| 彝良县| 仙桃市| 修水县| 承德市| 新竹市| 开阳县| 孟津县| 柏乡县| 淅川县| 武安市| 寿宁县| 屏山县| 黑山县| 黄石市| 元谋县| 彰化县| 元氏县| 卢龙县| 桃园市| 积石山|