工作中涉及到批量操作数据库的一些东西,一个个手动去弄太费劲,就写了个Utils操作 纪录一下方便后续查阅! 有需要的同行按照注释自取代码~
在Java中操作数据库、自定义JDBC
package cn.itcast.metadata;
import java.io.File;
import java.io.FileOutputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.junit.Test;
public class BackDB {
[@Test](https://my.oschina.net/azibug)
public void backDB2Console() 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.获得所有的数据库
ResultSet catalogResultSet = databaseMetaData.getCatalogs();
//2.遍历所有的数据库
while(catalogResultSet.next()){
//3.获得数据库的名称
String databaseName = catalogResultSet.getString(1);
//4.使用数据库
st.execute("use " + databaseName);
//5.获得当前数据库的所有的表
ResultSet tableResultSet = databaseMetaData.getTables(databaseName, null, null, null);
//6.遍历所有的表名
while(tableResultSet.next()){
//7.表名
String tableName = tableResultSet.getString(3);
//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()){
//13获得每一列的数据 列
for(int i = 1 ; i <= columnCount ; i ++){
//14 获得列名
String columnName = resultSetMetaData.getColumnName(i);
//15列的类型
String columnType = resultSetMetaData.getColumnTypeName(i);
//16数据
Object value = dataResultSet.getObject(columnName);
if(value != null){
System.out.println(columnName + " ## " + columnType + " ** " + value);
}
}
}
}
}
}
[@Test](https://my.oschina.net/azibug)
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创建 */
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();
}
}