第一种方式
数据库备份:
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均是经过封装的类
此方式不足之处在于,所有的路径中不能有空格,若有空格程序无法执行!
数据库备份:
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均是经过封装的类
此方式不足之处在于,所有的路径中不能有空格,若有空格程序无法执行!