用DBUnit 做數據備份恢復工具
DBunit(
http://dbunit.sourceforge.net/ )是一個非常好的數據庫unit系列工具.
一般都是用它在測試的時候管理數據庫。我們可以發揮一下,用它做一個備份和恢復的數據庫管理工具。
以mysql為例,正好現在還沒有找一個好用的mysql備份和恢復工具。這個是在代碼中管理不是用ant的方式。
主要是用到核心組件:
IDatabaseConnection、
IDataSet、
DatabaseOperation 。
先看代碼:
/**
* 導出數據到指定文件
* @param file 一個標準的java.io.File
* @param connection 一個標準的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();
}
在這個方法中指定了一個表名"room",如果有多個表可以通過參數或其他的方式按照這種方式繼續增加。這個文件是XML格式的。具體格式說明或其他格式參見http://dbunit.sourceforge.net/components.html#databaseconnection
/**
* 導入數據到ROOM表
* @param file 一個標準的java.io.File
* @param connection 一個標準的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);
}
這個方法可以把上面生成的XML文件導入到數據庫中,如果是其他格式的文件只需要更換IDataSetProducer的實現類就可以了。具體格式請參見APIDOC
在這個方法里使用了事務控制,保證數據的一致性。
有了這兩個方法我們就可以再發揮一下,然后為客戶提供一個備份恢復數據的工具了。如果再加入壓縮文件的支持就更加完美了。
posted on 2009-03-14 16:33
Libo 閱讀(2005)
評論(0) 編輯 收藏 所屬分類:
數據庫