隨筆-112  評論-73  文章-0  trackbacks-0
          用DBUnit 做數據備份恢復工具

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

          以mysql為例,正好現在還沒有找一個好用的mysql備份和恢復工具。這個是在代碼中管理不是用ant的方式。

          主要是用到核心組件:IDatabaseConnectionIDataSetDatabaseOperation

          先看代碼:
             /**
               * 導出數據到指定文件
               * @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)  編輯  收藏 所屬分類: 數據庫
          <2009年3月>
          22232425262728
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(6)

          隨筆分類(54)

          隨筆檔案(109)

          其他BLOG

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 葫芦岛市| 房产| 社会| 大余县| 苍南县| 富平县| 吉首市| 东乌珠穆沁旗| 花莲县| 乌拉特中旗| 大理市| 白城市| 蓬莱市| 日照市| 隆回县| 淅川县| 溧阳市| 巴彦县| 清苑县| 彩票| 南郑县| 枣阳市| 永吉县| 中西区| 遂溪县| 晋中市| 青川县| 阳高县| 措勤县| 会同县| 宽甸| 蓬莱市| 瓮安县| 景宁| 卢湾区| 武城县| 临桂县| 许昌市| 新化县| 辽源市| 乌兰浩特市|