話說今天不知道是抽風了還是失魂了,在用phpmyadmin刪除測試數據時,竟然將整個表刪除了:
package
com.nerve.sql.reload;
import
java.io.BufferedReader;
import
java.io.BufferedWriter;
import
java.io.FileReader;
import
java.io.FileWriter;
import
java.util.ArrayList;
import
java.util.List;
import
org.nerve.util.NumberUtil;
/**
* @project: cloudOffice_swing
* @file: ReloadWorker.java
* @package: com.nerve.sql.reload
* @description:
* 將二進制日志導出的文件中相應表的操作記錄提出出來
* @author: 集成顯卡 [email protected]
* @date&time: Jan 23, 2014
* @change log:
*/
public
class
ReloadWorker {
public
void
read(List<String> orgF, String targetF, String table)
throws
Exception{
BufferedWriter bw =
new
BufferedWriter(
new
FileWriter(targetF,
true
));
for
(String or:orgF){
BufferedReader br =
new
BufferedReader(
new
FileReader(or));
String t =
null
;
String t2 =
null
;
table = table.toUpperCase();
while
((t=br.readLine())!=
null
){
t2 = t.toUpperCase();
/*
* 如果是update操作,直接提出
*/
if
(t2.startsWith(
"UPDATE "
+table)){
bw.append(t+
";\n"
);
}
/*
* 如果是insert語句,因為有一些舊服務器的數據
* 所以要先執行delete操作
*/
else
if
(t2.startsWith(
"INSERT INTO "
+table)){
String ids = t2.substring(t2.lastIndexOf(
","
));
bw.append(
"delete from "
+table+
" where id="
+NumberUtil.toDigital(ids)+
";\n"
);
bw.append(t+
";\n"
);
}
/*
* sql語句後面都要加 ; ,因為原來沒有,不加的話,在導入到數據庫時,出錯
*/
}
br.close();
}
bw.flush();
bw.close();
}
public
static
void
main(String[] args)
throws
Exception{
long
sd = System.currentTimeMillis();
ReloadWorker w =
new
ReloadWorker();
List<String> orgs =
new
ArrayList<String>();
orgs.add(
"C:/Users/IBM_ADMIN/Desktop/000015.txt"
);
orgs.add(
"C:/Users/IBM_ADMIN/Desktop/000016.txt"
);
orgs.add(
"C:/Users/IBM_ADMIN/Desktop/000017.txt"
);
orgs.add(
"C:/Users/IBM_ADMIN/Desktop/000018.txt"
);
orgs.add(
"C:/Users/IBM_ADMIN/Desktop/000019.txt"
);
String targetS =
"C:/Users/IBM_ADMIN/Desktop/000017_sql.txt"
;
w.read(orgs, targetS,
"task"
);
System.out.println(
"DONE, on "
+(System.currentTimeMillis() - sd)/
1000
+
" s"
);
}
}
得到了匯總的sql文件後,就導入到數據庫中。 最後,出一個運行圖: