續寫:java備份mysql數據庫保存到xml中

其中java備份數據庫的代碼註釋是//開頭,例如://1.得到全部的數據庫
xml的註釋是/** #1 建立document */ 爲了方便你們看我採用了不一樣的註釋 java

爲了將java備份mysql數據庫後的結果更好的保存我採用了xml的方式,由於xml能夠自定義標籤能吧整個mysql數據庫按照
<mysql>
<database>
<table>
.........
</table>
</database>
</mysql>
方式進行管理,這樣更方便查看總體的佈局及數據庫的屬性 mysql

@Test
public void backDB2Xml() throws Exception{  //2 to  4 for
 
  String driver = "com.mysql.jdbc.Driver";
  String url = "jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=UTF-8";
  String user = "root";
  String password = "1234";
  Class.forName(driver);
  //連接
  Connection conn = DriverManager.getConnection(url, user, password);
  //語句執行者
  Statement st = conn.createStatement();
 
  //0.數據庫的元數據
  DatabaseMetaData databaseMetaData = conn.getMetaData();
 
  /** #1 建立document */
  Document document = DocumentHelper.createDocument();
  /** #2添加根元素 */
  Element rootElement = document.addElement("mysql");
 
  //1.得到全部的數據庫
  ResultSet catalogResultSet = databaseMetaData.getCatalogs();
 
  //2.遍歷全部的數據庫
  while(catalogResultSet.next()){
   //3.得到數據庫的名稱
   String databaseName = catalogResultSet.getString(1);
  
   /** #3建立 <database> */
   Element dataBaseElement = rootElement.addElement("database");
   /** #4設置數據的名稱 */
   dataBaseElement.addAttribute("name", databaseName);
  
   //4.使用數據庫
   st.execute("use " + databaseName);
   //5.得到當前數據庫的全部的表
   ResultSet tableResultSet = databaseMetaData.getTables(databaseName, null, null, null);
  
   //6.遍歷全部的表名
   while(tableResultSet.next()){
    //7.表名
    String tableName = tableResultSet.getString(3);
   
    /** #5 給database添加table */
    Element tableElement = dataBaseElement.addElement("table");
    /** #6table元素添加name屬性 */
    tableElement.addAttribute("name", tableName);
   
    //8.得到當前表的全部數據
    String sql = "select * from " + tableName;
    //9.全部數據的結果集
    ResultSet dataResultSet = st.executeQuery(sql);  //行
    //10.得到數據的元數據
    ResultSetMetaData resultSetMetaData = dataResultSet.getMetaData();
    //11.得到列數
    int columnCount = resultSetMetaData.getColumnCount();  //列
   
    //12遍歷行,數據的結果集
    while(dataResultSet.next()){
    
     /** #7給table元素添加data元素 */
     Element dataElement = tableElement.addElement("data");
    
     //13得到每一列的數據  列
     for(int i = 1 ; i <= columnCount ; i ++){
      /** #8給data元素添加column */
      Element columnElement = dataElement.addElement("column");
      //14 得到列名
      String columnName = resultSetMetaData.getColumnName(i);
      /** #9給column元素設置name */
      columnElement.addAttribute("name", columnName);
      //15列的類型
      String columnType = resultSetMetaData.getColumnTypeName(i);
      /** #10 column元素設置type */
      columnElement.addAttribute("type", columnType);
      //16數據
      Object value = dataResultSet.getObject(columnName);
      if(value != null){
       //System.out.println(columnName + " ## " + columnType + " ** " + value);
       /** #11 */
       columnElement.setText(value.toString());
      }
     }
    }
   }
  
  }
 
  /** #12將document保存到xml中 */
  FileOutputStream xmlOut = new FileOutputStream(new File("mysql_back.xml"));
  XMLWriter xmlWriter = new XMLWriter(xmlOut,OutputFormat.createPrettyPrint());
  xmlWriter.write(document);
  xmlWriter.close();
 
} sql

} 數據庫

相關文章
相關標籤/搜索