標籤:
package com.backup;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
/*
* 備份和匯入是一個互逆的過程。
* 備份:程式調用mysql的備份命令,讀出控制台輸入資料流資訊,寫入.sql檔案;
* 匯入:程式調用mysql的匯入命令,把從.sql檔案中讀出的資訊寫入控制台的輸出資料流
* 注意:此時定向符">"和"<"是不能用的
*/
//backup();
//load();
}
/**
* 備份檢驗一個sql檔案是否可以做匯入檔案用的一個判斷方法:把該sql檔案分別用記事本和ultra
* edit開啟,如果看到的中文均正常沒有亂碼,則可以用來做匯入的源檔案(不管sql檔案的編碼格式如何,也不管db的編碼格式如何)
*/
public static void backup() {
try {
Runtime rt = Runtime.getRuntime();
// 調用 mysql 的 cmd:
Process child = rt
.exec("mysqldump -u root --set-charset=utf8 pj");// 設定匯出編碼為utf8。這裡必須是utf8
// 把進程執行中的控制台輸出資訊寫入.sql檔案,即產生了備份檔案。註:如果不對控制台資訊進行讀出,則會導致進程堵塞無法運行
InputStream in = child.getInputStream();// 控制台的輸出資訊作為輸入資料流
InputStreamReader xx = new InputStreamReader(in, "utf8");// 設定輸出資料流編碼為utf8。這裡必須是utf8,否則從流中讀入的是亂碼
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
// 組合控制台輸出資訊字串
BufferedReader br = new BufferedReader(xx);
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
// 要用來做匯入用的sql目標檔案:
FileOutputStream fout = new FileOutputStream(
"e:/bjse22.sql");
OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
writer.write(outStr);
// 註:這裡如果用緩衝方式寫入檔案的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關閉輸入輸出資料流
in.close();
xx.close();
br.close();
writer.close();
fout.close();
System.out.println("/* Output OK! */");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 匯入
*
*/
public static void load() {
try {
String fPath = "e:/bjse22.sql";
Runtime rt = Runtime.getRuntime();
// 調用 mysql 的 cmd:
Process child = rt.exec("mysql -u root pj ");
OutputStream out = child.getOutputStream();//控制台的輸入資訊作為輸出資料流
String inStr;
StringBuffer sb = new StringBuffer("");
String outStr;
BufferedReader br = new BufferedReader(new InputStreamReader(
new FileInputStream(fPath), "utf8"));
while ((inStr = br.readLine()) != null) {
sb.append(inStr + "\r\n");
}
outStr = sb.toString();
OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
writer.write(outStr);
// 註:這裡如果用緩衝方式寫入檔案的話,會導致中文亂碼,用flush()方法則可以避免
writer.flush();
// 別忘記關閉輸入輸出資料流
out.close();
br.close();
writer.close();
System.out.println("/* Load OK! */");
} catch (Exception e) {
e.printStackTrace();
}
}
}
本文轉自:http://www.blogjava.net/zhaosoft/archive/2008/10/30/237514.html
Java實現Mysql資料匯入匯出