第二种方式:
数据备份:
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: 管道正在被关闭
可能是你的链接数据库的密码设置错误
分享到:
相关推荐
数据库数据的备份与还原最好是使用数据库自带的客户端软件来实现,JAVA可以通过调用mysqldump、mysql客户端软件分别进行mysql数据库的备份还原,当然前提是JAVA服务器必须安装mysql客户端软件
NULL 博文链接:https://weishaoxiang.iteye.com/blog/1237809
以下是一个示例,展示如何使用Python代码调用命令行来执行MySQL数据库备份和恢复操作。 需要将your_username替换为你的MySQL数据库的用户名,your_password替换为你的密码,your_database替换为你要备份的数据库...
NULL 博文链接:https://zhouwenjun.iteye.com/blog/526159
Java调用数据库存储过程[mysql测试通过]
Java程序调用linux命令、脚本,支持程序在服务器上使用linux命令。工具类为:ProcessUtil,支持单个命令和批量命令执行函数,同时在工具类中添加了getFileLineNumByCmd函数支持通过linux命令获取文件行数的样例。
介绍mysql数据库,单表备份,整库备份。
java 系统命令调用!
计算机二级mysql数据库程序设计练习题(二)全文共12页,当前为第1页。计算机二级mysql数据库程序设计练习题(二)全文共12页,当前为第1页。计算机二级mysql数据库程序设计练习题(二) 计算机二级mysql数据库程序设计...
本文章阐述在java中,如何调用MySQL数据库中的数据,以及insert,select,update和delect命令的使用。
在实际应用中,定时备份数据库是一件非常重要的工作,下面是关于利用java程序实现数据库自动调用的方法,其实也不一定非要用 java语言了,只要原理会了,大家大可使用其他语言来实现。话不多说,下面就来演示一下...
index是主文件,会调用mysql_back.sh,只执行index即可,测试机是在170远程备份158的数据库到170上的文件夹里,该脚本未做目录是否存在的校检,使用前还需要建立 ~/workspace/目录
大家直接复制MYSQL 数据库的方式备份的数据库有时会不完整无法在其他服务器还原。 这是一个 DOS 批处理文件 先用命令停止MYSQL 服务然后打包数据库目录到指定目录(修改文件中的源数据目录和备份目录),打包结束后...
NULL 博文链接:https://skying007.iteye.com/blog/769627
java调用linux系统命令的封装工具类。
Java程序调用MATLAB接口
附件为两个.bat脚本文件,用于在Windows下备份MySQL数据库,一个是备份数据库文件,另一个是将数据库导出sql脚本。需要自己修改数据库名称,备份到sql脚本的,需要自己手动创建好路径文件夹。这两个批处理文件都是...
1. 使用定时任务调用mysqldump命令实现mysql数据库数据库备份。 2. 通过rabbitmq发送消息给客户端。让客户端拉取备份数据