Java备份数据库

开发工具与关键技术:Java、myEclipse
作者:吴晓佩
撰写时间:2019年08月01日

在实训Java项目的时候需要实现备份数据库的功能,虽然学习C#的时候也有实现过这一功能,但是对我一个初学java的人来说还有一定难度的,于是在网上找了一些资源,慢慢理解,然后实现了这一功能。
备份是数据库对数据的管理起到作用,可以防止数据丢失,特别是存储大量重要数据的时候,系统不出问题,备份的数据库并没有什么作用,但当程序出错的时候备份的数据库就大有用处了,我们可以还原系统出问题前的数据,避免了重头录入数据的无谓操作。
MySQL的端口号为3306,SQL server的端口号为1433,Oracle的端口号为1521,如下就是实现数据库备份的相关代码与注解,以Mysql数据库为例。个人需求,获取当前时间的部分只用于命名,可忽略。大体需要改动的地方就是根据自己需要备份的数据库来准备参数。

public void baseData(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("/text/json");
//获取备份数据库的当前时间,用以备份的数据库命名
Date date=new Date();
DateFormat df=new SimpleDateFormat(“yyyyMMddHHmm”);
String strDate=df.format(date);
System.out.println(strDate);
String ip = “127.0.0.1”;//MySQL数据库所在服务器地址IP,本机IP
String host = “3306”;//数据库端口号,3306为MySQL数据库的端口号
String userName = “root”;//数据库用户名称
String password = “root”;//数据库登录密码
String databaseName = “dfzx”;//需要备份的数据库名称
String savePath = “F:\BaseData_DFZX”;//数据库导出文件保存路径
String fileName = strDate+"_dfzx.sql";//数据库导出文件名
String strMsg = “fail”;
File saveFile = new File(savePath);
if (!saveFile.exists()) {// 判断目录是否存在,
saveFile.mkdirs();// 如果不存在则需创建文件夹
}
if (!savePath.endsWith(File.separator)) {//判断字符串是否以指定的后缀结束
savePath = savePath + File.separator;
}
// 字符输出流
PrintWriter printWriter = null;
BufferedReader bufferedReader = null;
try {
printWriter = new PrintWriter(new OutputStreamWriter(
new FileOutputStream(savePath + fileName), “utf8”));
//调用外部执行exe文件的javaAPI
Process process = Runtime.getRuntime().exec(
//mysqldump -h端口号 -u用户 -p密码 数据库
" mysqldump -h" + ip + " -P" + host + " -u" + userName
+ " -p" + password
+ " --default-character-set=utf8 " + databaseName);
InputStreamReader inputStreamReader = new InputStreamReader(
process.getInputStream(), “utf8”);
bufferedReader = new BufferedReader(inputStreamReader);
String line;
while ((line = bufferedReader.readLine()) != null) {
printWriter.println(line);
}
printWriter.flush();
if (process.waitFor() == 0) {// process.waitFor()=0 表示线程正常终止。
strMsg = “success”;//用于页面提示
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
if (printWriter != null) {
printWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
PrintWriter out = response.getWriter();
out.write(ToJsonUtil.toJson(strMsg));
out.flush();
out.close();
System.out.println(strMsg);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
效果图如下:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值