Java程序调用系统命令进行mysql数据库的备份与还原(方式二)

第二种方式:

数据备份:
public class dbbackup {

public static void backup(string dbname,string file){
string user = "root"; // 数据库帐号
string password = "123456"; // 登陆密码
string database = dbname; // 需要备份的数据库名
string filepath = file; // 备份的路径地址
//mysql命令的路径
string mysqlpath="c:/program files/mysql/mysql server 5.1/bin/";
try{
runtime rt = runtime.getruntime();
process child = rt.exec(mysqlpath+"mysqldump -u"+user+" -p"+password+" "+database);
inputstream in = child.getinputstream();// 控制台的输出信息作为输入流
inputstreamreader isr = new inputstreamreader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
string instr;
stringbuffer sb = new stringbuffer("");
string outstr;
// 组合控制台输出信息字符串
bufferedreader br = new bufferedreader(isr);
while ((instr = br.readline()) != null) {
sb.append(instr + "\r\n");
}
outstr = sb.tostring();//备份出来的内容是一个字条串
fileoutputstream fout = new fileoutputstream(filepath);
outputstreamwriter writer = new outputstreamwriter(fout, "utf8");
writer.write(outstr);//写文件
// 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
writer.flush();
// 别忘记关闭输入输出流
in.close();
isr.close();
br.close();
writer.close();
fout.close();
}
catch(exception e){
e.printstacktrace();
}
}

}


数据还原:
public class dbupload {

private static string databases;
static{
querybuilder qb=new querybuilder("show databases;");
datatable dt=qb.executedatatable();
stringbuffer court=new stringbuffer("");
if(dt.getrowcount()>0){
for(int i=0;i<dt.getrowcount();i++){
if(i==0){
court.append(dt.getstring(i,"database"));
}else{
court.append(","+dt.getstring(i,"database"));
}
}
databases=court.tostring().trim();
}else{
databases="";
}
}

//判断数据库是否已经存在
public static boolean isexist(string dbname){
if(stringutil.isempty(databases)){
return false;
}else{
string dbs[]=databases.split(",");
for(int i=0;i<dbs.length;i++){
if(dbname.equalsignorecase(dbs[i])){
return true;
}else{
continue;
}
}
return false;
}
}


public static boolean load(string dbname,string file){
string user = "root"; // 数据库帐号
string password = "mysql"; // 登陆密码
string database = dbname; // 需要备份的数据库名
string filepath=file;
string str1="mysqladmin -u "+user+" -p"+password+" create "+database;
string str2="mysql -u "+user+" -p"+password+" "+database;
try{
if(!isexist(dbname)){//不存在此数据库
process p=runtime.getruntime().exec(str1);
p.waitfor();
}
process child=runtime.getruntime().exec(str2);
outputstream out = child.getoutputstream();//控制台的输入信息作为输出流
string instr;
stringbuffer sb = new stringbuffer("");
string outstr;
bufferedreader br=new bufferedreader(new inputstreamreader( new fileinputstream(filepath), "utf8"));
while ((instr = br.readline()) != null) {
sb.append(instr + "\r\n");
}
outstr = sb.tostring();
outputstreamwriter writer = new outputstreamwriter(out, "utf8");
writer.write(outstr);
writer.flush();
// 别忘记关闭输入输出流
out.close();
br.close();
writer.close();
system.out.println("数据导入成功!");
}
catch(exception e){
e.printstacktrace();
}
return false;

}

}


此方式可以接受命令的路径命中包含空格!!


如果程序出现如后错误:java.io.ioexception: 管道已结束

java.io.ioexception: 管道正在被关闭
可能是你的链接数据库的密码设置错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值