日期:2014-05-16 浏览次数:20555 次
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.lang.StringUtils;
public class DataMigrationTool {
/**
* @param args
*/
public static void main(String[] args) {
loadDirver();
String[] ids = { "109159947", "173902327", "757427151", "125380114", "715426426" };
List<String> list = exportDataSQL(ids);
URL url = DataMigrationTool.class.getResource("");
Date now = new Date();
SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd_HH-mm_ss_SSS");
String filePath = new File(url.getFile() + "exported_data_" + formater.format(now) + ".sql").getAbsolutePath();
writeSQLFile(filePath, list);
}
private static List<String> exportDataSQL(String[] ids) {
List<String> allList = new ArrayList<String>();
for (String id : ids {
allList.add("------------------------------------------------");
allList.add("-- Data for id: " + id);
allList.add("------------------------------------------------");
List<String> list = generateSQLList(id);
allList.addAll(list);
}
return allList;
}
public static void writeSQLFile(String filePath, List<String> stringList) {
System.out.println("导出流程数据(SQL语句格式)到:" + filePath);
FileWriter writer = null;
try {
writer = new FileWriter(new File(filePath));
for (String sql : stringList) {
System.out.println(sql);
writer.write(sql + "\n");
}
writer.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 根据id生成导出数据的SQL
*
* @param id
* @return
*/
public static List<String> generateSQLList(String id) {
List<String> sqlList = new ArrayList<String>();
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
con = DriverManager.getConnection("", "", "");
stmt = con.createStatement();
DatabaseMetaData metadata = con.getMetaData();
System.out.println(metadata.getDatabaseProductName() + " " + metadata.getDatabaseMajorVersion() + "."
+ metadata.getDatabaseMinorVersion());
String tableName = "TEST";
// /////////////////////////////////////////////////////
// 导出TEST
// /////////////////////////////////////////////////////
sqlList.add("-- "+tableName);
String sql = generateQuerySQL(metadata, tableName, "where ID='" + id + "'");
//System.out.println(queryWorkFlowSQL);
rs = stmt.executeQuery(sql);
String workflow_expand = "";
while (rs.next()) {
String insertSQL = generateInsertSQL(rs, tableName);
sqlList.add(insertSQL);
// System.out.println(insertSQL);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return sqlList;
}
/**
* 根据结果集和表名生成INSERT语句。
*
* @param rs
* @param tableName
* @return
* @throws SQLException
*/
private static String generateInsertSQL(ResultSet rs, String tableName) throws SQLException {
if (rs == null)
return "";
StringBuilder insertSQLBuilder = new StringBuilder();
insertSQLBuilder.append("insert into ").append(tableName).append