利用ddlutil進行數(shù)據(jù)庫遷移_第1頁
利用ddlutil進行數(shù)據(jù)庫遷移_第2頁
利用ddlutil進行數(shù)據(jù)庫遷移_第3頁
利用ddlutil進行數(shù)據(jù)庫遷移_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、不同數(shù)據(jù)庫間數(shù)據(jù)的遷移通常是件麻煩事,特別是如今移動應(yīng)用和移動商務(wù)普及的今天。針對此需求,在此簡要介紹DDlUtil在不同數(shù)據(jù)庫間遷移數(shù)據(jù)的使用方法和過程.做為Apacher軟件聯(lián)盟旗下數(shù)據(jù)庫項目的一個子項目,DdlUtil是一個小巧的,與數(shù)據(jù)庫描述文件一起使用的組件. 利用DdlUtils提供的功能,程序員可以方便的在不同的數(shù)據(jù)庫之間實現(xiàn)數(shù)據(jù)的遷移.而不用考慮底層數(shù)據(jù)庫實現(xiàn)的細節(jié)差異.在此數(shù)據(jù)庫描述文件通常是一些XML文件,他們分別包含了數(shù)據(jù)庫的定義文件及實際數(shù)據(jù)文件. 得益于DdlUtils良好的設(shè)計,在實際應(yīng)用中,只需相因?qū)胩囟〝?shù)據(jù)庫的數(shù)據(jù)庫驅(qū)動,既可獲得DdlUtils的支持。如果要

2、獲取更多的信息,DdlUtil的官網(wǎng)是 . 下面以一個實際例子說明DdlUtils的使用過程,DerbyMySQLDdlUtilsDdlUtilsN1在此為了敘述方便我們簡化數(shù)據(jù)庫的內(nèi)容僅包含一張名為customer的表,其中id字段為其主鍵,不允許重復(fù)插入.MySQL數(shù)據(jù)庫可以代表移動應(yīng)用中的數(shù)據(jù)中心,負責(zé)匯集許多不同的分布數(shù)據(jù)庫Derby中的數(shù)據(jù). Derby代表移動應(yīng)用中的一個獨立客戶端,他和MySQL數(shù)據(jù)中心擁有共享數(shù)據(jù)的同時,也有自己獨有的數(shù)據(jù),需要上傳保存. MySQL數(shù)據(jù)庫初始內(nèi)容與Derby內(nèi)容初始內(nèi)容如下,在此id值為4的數(shù)據(jù)趙七為需要同步的數(shù)據(jù). 下面讓我們開始具體操作.第

3、一步:構(gòu)件環(huán)境,導(dǎo)入相應(yīng)依賴驅(qū)動包為了確定數(shù)據(jù)庫的具體位置DdlUtils需要借助外部數(shù)據(jù)源模塊,在此推薦Apacher軟件聯(lián)盟下的另一個常用項目DBCP (Database Connection Pooling,數(shù)據(jù)庫連接池).截至本文其最新版本為 .可在獲取更多信息.此外程序還需要導(dǎo)入MySQL和Derby的對應(yīng)數(shù)據(jù)庫驅(qū)動jar包到工程路徑,在此不做具體論述.讀者可根據(jù)具體情況導(dǎo)入.第二步:利用DdlUtils導(dǎo)出數(shù)據(jù)庫定義文件和數(shù)據(jù)庫數(shù)據(jù)文件.DerbyDdlUtils過程主要代碼如下/利用DBCP提供的BasicDataSource指定數(shù)據(jù)源位置BasicDataSource data

4、Source_Derby = new BasicDataSource();dataSource_Derby.setDriverClassName("org.apache.derby.jdbc.ClientDriver");dataSource_Derby.setUrl("jdbc:derby:/:1527/e:anttestMyDbTest");/獲取數(shù)據(jù)庫平臺和模型Platform platform_Derby = PlatformFactory.createNewPlatformInstance(dataSource_Derby);

5、Database database_Derby= platform_Derby.readModelFromDatabase("MyDbTest");/導(dǎo)出數(shù)據(jù)庫描述的定義文件new DatabaseIO().write(database_Derby, "C:DatabasedbXML.txt");/導(dǎo)出數(shù)據(jù)庫的數(shù)據(jù)文件FileOutputStream fos=new FileOutputStream("C:DatabasedumpFile.txt");DataWriter dw=new DataWriter(fos);new Data

6、baseDataIO().writeDataToXML(platform_Derby, database_Derby,dw);以上代碼展示了如何利用DdlUtils導(dǎo)出數(shù)據(jù)庫的定義文件和數(shù)據(jù)庫數(shù)據(jù)文件.程序?qū)С龅臄?shù)據(jù)庫的定義文件dbXML.txt的內(nèi)容如下所示。他包含了數(shù)據(jù)庫表格的詳細描述<?xml version="1.0"?><!DOCTYPE database SYSTEM "/torque/dtd/database"> <database name="MyDbTest&

7、quot;> <table name="CUSTOMER"> <column name="ID" primaryKey="true" required="true" type="INTEGER" size="10" autoIncrement="false"/> <column name="NAME" primaryKey="false" required="false&

8、quot; type="VARCHAR" size="20" autoIncrement="false"/> </table> </database>程序?qū)С龅臄?shù)據(jù)庫數(shù)據(jù)文件dumpFile.txt內(nèi)容如下所示。他包含了具體的數(shù)據(jù)信息.<?xml version='1.0' encoding='UTF-8'?><data><CUSTOMER ID="1" NAME="張三" /> <CUSTO

9、MER ID="2" NAME="李四" /> <CUSTOMER ID="3" NAME="王五" /> <CUSTOMER ID="4" NAME="趙七" /></data>從上述文件可以看到,DdlUtils用統(tǒng)一的模式把數(shù)據(jù)庫和其中的對象統(tǒng)一抽取成DdlUtils認可的模式。在此我們的導(dǎo)出文件為XML文件,作為信息的載體,XML獨立于各種不同的數(shù)據(jù)庫平臺。有關(guān)XML文件格式限定的schema,和Ddlutils對不同數(shù)據(jù)類型

10、的轉(zhuǎn)換,大家可在獲取詳細的解釋下面對剛才程序中設(shè)計的類做簡要說明Platform:在此platform是一個接口,他封裝了與數(shù)據(jù)庫相關(guān)的查詢,維護等平臺的功能,其真正的執(zhí)行類是我門在創(chuàng)建數(shù)據(jù)源時對應(yīng)制定的數(shù)據(jù)庫驅(qū)動。:代表了一個數(shù)據(jù)庫的具體模型,包含了具體表格的定義等(注意Database包含的不是數(shù)據(jù)庫的實際數(shù)據(jù)文件,而是數(shù)據(jù)庫的定義描述).利用DatabaseIO就可以把內(nèi)存中的Database Model輸出成數(shù)據(jù)庫定義XML文件.:提供了從XML文件讀取數(shù)據(jù)庫模型文件,和寫數(shù)據(jù)庫模型到XML文件的功能。第三步:利用DdlUtils導(dǎo)入數(shù)據(jù)庫定義文件和數(shù)據(jù)庫數(shù)據(jù)文件到MySQL數(shù)據(jù)中心.

11、MySQLDdlUtils過程主要代碼如下/從外部的XML文件獲取數(shù)據(jù)庫模型Database database_Derby =new DatabaseIO().read("C:DatabasedbXML.txt");/定義mysql數(shù)據(jù)源BasicDataSource dataSource_MySQL = new BasicDataSource();dataSource_MySQL.setDriverClassName("com.mysql.jdbc.Driver");dataSource_MySQL.setUsername("root&quo

12、t;);dataSource_MySQL.setPassword("mysql");dataSource_MySQL.setUrl("jdbc:mysql:/localhost:3309/test");/獲取MySQL的數(shù)據(jù)庫平臺Platform platform_MySQL = PlatformFactory.createNewPlatformInstance(dataSource_MySQL);platform_MySQL.createTables(database_Derby, false, true);/獲取外部數(shù)據(jù)庫數(shù)據(jù)文件File dump=

13、new File("C:DatabasedumpFile.txt");/構(gòu)造一個InputStream輸入流數(shù)組,根據(jù)實際需要可以添加多個FileInputStream fio=new FileInputStream(dump);InputStream infi=new InputStream1; infi0=fio;DatabaseDataIO databasedataIO=new DatabaseDataIO();/設(shè)定導(dǎo)入不啟批量導(dǎo)入databasedataIO.setUseBatchMode(false);/設(shè)定遇到重復(fù)數(shù)據(jù)時直接忽略錯誤databasedataIO.setFailOnError(false);/數(shù)據(jù)導(dǎo)入databasedataIO.writeDataToDatabase(platform_MySQL,database_Derby, infi);程序執(zhí)行后MySQL數(shù)據(jù)庫結(jié)果如圖成功插入了id為4值為趙七的紀(jì)錄.在以上程序中,借助第二步中所得的數(shù)據(jù)庫描述文件和數(shù)據(jù)庫定義文件,將Derby數(shù)據(jù)庫中的數(shù)據(jù),遷移到了MyS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論