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: 集成显卡 1053214511@qq.com
* @
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"
);
}
}