`
lucene3211
  • 浏览: 113743 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

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

    博客分类:
  • java
阅读更多
    第一种方式

数据库备份:
public class dbbackup {
  //导出数据库成sql文件
  public static  void  backup(string dbname,string file){
 
    string user = "root"; // 数据库帐号
     string password = "123456"; // 登陆密码
     string database = dbname; // 需要备份的数据库名
     string filepath = file; // 备份的路径地址
     string str="mysqldump " + database + " -u " + user + " -p"+ password + " --result-file=" + filepath;
     try {
         process p=runtime.getruntime().exec(str); //执行命令
p.waitfor(); //命令执行时,等待状态
           system.out.println("数据已导出到文件" + filepath + "中");
      }
      catch (ioexception e) {
e.printstacktrace();
      }
      catch(interruptedexception e){
e.printstacktrace();
       }
  }

}


数据恢复:
  public class dbupload {
 
  private static string databases;//mysql中所有数据库的名称组成的字符串,逗号隔开
  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 = "123456"; // 登陆密码
        string database = dbname; // 需要备份的数据库名
        string filepath=file;
       string str1="mysqladmin -u "+user+" -p"+password+" create "+database;
       string str2="mysql -u "+user+" -p"+password+" "+database+" < " + filepath;
       string[] cmd={"cmd","/c",str2};
       try{
          if(!isexist(dbname)){//不存在此数据库
      runtime.getruntime().exec(str1);
}
process p= runtime.getruntime().exec(cmd);
p.waitfor();
system.out.println("数据已从 " + filepath + " 导入到数据库中");
return  true;
       }catch(exception e){
          e.printstacktrace();
          return false;
       }
  }

  }

querybuilder datatable stringutil均是经过封装的类
此方式不足之处在于,所有的路径中不能有空格,若有空格程序无法执行!


 
0
6
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics