其中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
} 數據庫