您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源單元測(cè)試工具 > DBunit
如何使用DBUnit做數(shù)據(jù)備份恢復(fù)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2013/3/13 16:33:03 ] 推薦標(biāo)簽:

用DBUnit 做數(shù)據(jù)備份恢復(fù)工具

DBunit(http://dbunit.sourceforge.net/ )是一個(gè)非常好的數(shù)據(jù)庫(kù)unit系列工具,一般都是用它在測(cè)試的時(shí)候管理數(shù)據(jù)庫(kù)。我們可以發(fā)揮一下,用它做一個(gè)備份和恢復(fù)的數(shù)據(jù)庫(kù)管理工具。

以mysql為例,正好現(xiàn)在還沒(méi)有找一個(gè)好用的mysql備份和恢復(fù)工具。這個(gè)是在代碼中管理不是用ant的方式。

主要是用到核心組件:IDatabaseConnection、IDataSet、DatabaseOperation 。

先看代碼:
   /**
     * 導(dǎo)出數(shù)據(jù)到指定文件
     * @param file 一個(gè)標(biāo)準(zhǔn)的java.io.File
     * @param connection  一個(gè)標(biāo)準(zhǔn)的java.sql.Connection
     * @throws org.dbunit.DatabaseUnitException
     */
    public static void exportRoom(File file, Connection connection) throws DatabaseUnitException, IOException {
        IDatabaseConnection databaseConnection = new DatabaseConnection(connection);
        QueryDataSet dataSet = new QueryDataSet(databaseConnection);
        dataSet.addTable("room");
        Writer writer = new FileWriter(file);
        XmlDataSetWriter w = new XmlDataSetWriter(writer);
        w.write(dataSet);
        writer.flush();
        writer.close();
    }
在這個(gè)方法中指定了一個(gè)表名"room",如果有多個(gè)表可以通過(guò)參數(shù)或其他的方式按照這種方式繼續(xù)增加。這個(gè)文件是XML格式的。具體格式說(shuō)明或其他格式參見(jiàn)http://dbunit.sourceforge.net/components.html#databaseconnection

    /**
     * 導(dǎo)入數(shù)據(jù)到ROOM表
     * @param file  一個(gè)標(biāo)準(zhǔn)的java.io.File
     * @param connection 一個(gè)標(biāo)準(zhǔn)的java.sql.Connection
     */
    public static void importRoom(File file, Connection connection) throws DatabaseUnitException, IOException, SQLException {
        IDataSetProducer dataSetProducer = new XmlProducer(FileHelper.createInputSource(file));
        IDataSet dataSet = new CachedDataSet(dataSetProducer);
        IDatabaseConnection databaseConnection = new DatabaseConnection(connection);
        DatabaseOperation operation = DatabaseOperation.CLEAN_INSERT;
        DatabaseOperation.TRANSACTION(operation);
        operation.execute(databaseConnection, dataSet);
        DatabaseOperation.CLOSE_CONNECTION(operation);
    }
這個(gè)方法可以把上面生成的XML文件導(dǎo)入到數(shù)據(jù)庫(kù)中,如果是其他格式的文件只需要更換IDataSetProducer的實(shí)現(xiàn)類(lèi)可以了。具體格式請(qǐng)參見(jiàn)APIDOC
在這個(gè)方法里使用了事務(wù)控制,保證數(shù)據(jù)的一致性。

有了這兩個(gè)方法我們可以再發(fā)揮一下,然后為客戶(hù)提供一個(gè)備份恢復(fù)數(shù)據(jù)的工具了。如果再加入壓縮文件的支持更加完美了。

軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd