数据备份对于经常在运维部署方面的工作者来说,是一件相对简单的事情,都可以通过某一个SQL工具进行备份,但是如果在项目运行当中,我们需要对数据进行实时,或者是每隔一星期,一个月,等等进行数据的备份,这样就需要java工具来操作备份SQL文件,目前可以通过调用mysql安装的命令进行数据备份,另外通过Job任务调度器进行配合使用,这里技术选型为Quartz。

在下面代码当中address为SQL脚本文件存放的地址。

其中path为mysql的安装位置:

D:\mysql\mysql-5.6.35-winx64\bin

public MapexportDatabase(String address) {

Map resultMap = newHashedMap();try{

String path= PropertiesFileUtil.getInstance("sql").get("path");

String root= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String dataBase= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.dataBase");

String table= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.table");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String sqlName= System.currentTimeMillis() + ".sql";

Runtime rt=Runtime.getRuntime();

Process child= rt.exec(path + "mysqldump -u" + root + " -p" + password + " -R -c --set-charset=utf8 " + dataBase + " " + table + "");

InputStream in=child.getInputStream();

InputStreamReader xx= new InputStreamReader(in, "utf8");

String inStr;

StringBuffer sb= new StringBuffer("");

String outStr;

BufferedReader br= newBufferedReader(xx);while ((inStr = br.readLine()) != null) {

sb.append(inStr+ "\r\n");

}

outStr=sb.toString();

FileOutputStream fout= new FileOutputStream(address + "/" +sqlName);

OutputStreamWriter writer= new OutputStreamWriter(fout, "utf8");

writer.write(outStr);

writer.flush();

in.close();

xx.close();

br.close();

writer.close();

fout.close();

resultMap.put("result", "success");

resultMap.put("data", address + "/" +sqlName);returnresultMap;

}catch(Exception e) {

e.printStackTrace();

}

resultMap.put("result", "fail");

resultMap.put("data", "地址选择有可能出现问题");returnresultMap;

}

上述代码当中主要的是用到了Runtime,Runtime封装了运行环境,每一个java运行实例都有一个Runtime类为实例,使程序能够与其环境相接。

一般不能实例化一个Runtime对象,应用程序不能创建自己的Runtime实例,但是可以通过getRuntime的方法获取当前Runtime运行时对象的引用。

一旦得到当前的Runtime对象的引用,就可以调用Runtime对象的方法去控制java虚拟机的状态和行为。

执行SQL脚本,我们可以通过ant来实现,首先我们引入ant的jar包

org.apache.ant

ant

1.7.1

public MapimportDatabase(String filepath) {

Map resultMap = newHashedMap();try{

String username= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.username");

String password= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.password");

String url= PropertiesFileUtil.getInstance("sql").get("sql.jdbc.url");

String driverClassName=PropertiesFileUtil.getInstance("sql").get("sql.jdbc.driver");

String filepathName= filepath.substring(0, filepath.lastIndexOf("."));

String outputPath= filepathName + ".out";

SQLExec sqlExec= newSQLExec();//设置数据库参数

sqlExec.setDriver(driverClassName);

sqlExec.setUrl(url);

sqlExec.setUserid(username);

sqlExec.setPassword(password);//设置字符编码

sqlExec.setEncoding("UTF-8");//要执行的脚本

sqlExec.setSrc(newFile(filepath));//有出错的语句该如何处理

sqlExec.setOnerror((SQLExec.OnError) (EnumeratedAttribute.getInstance(

SQLExec.OnError.class, "abort")));

sqlExec.setPrint(true); //设置是否输出//输出到文件 sql.out 中;不设置该属性,默认输出到控制台

sqlExec.setOutput(newFile(outputPath));

sqlExec.setProject(new Project()); //要指定这个属性,不然会出错

sqlExec.execute();

logger.info("执行sql脚本文件成功");

resultMap.put("result", "success");

}catch(Exception e) {

logger.info("执行sql脚本文件失败");

e.printStackTrace();

resultMap.put("result", "fail");returnresultMap;

}returnresultMap;

}

欢迎关注微信公众号:摘星族,我们在等待您的加入。

数据库备份 java jar_Java实现数据库备份并利用ant导入SQL脚本相关推荐

  1. java查询oracle数据库_Oracle数据库之java 从Oracle数据库到处数据到Elasticsearch全文检索库进行全文查询...

    本文主要向大家介绍了Oracle数据库之java 从Oracle数据库到处数据到Elasticsearch全文检索库进行全文查询,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. ...

  2. mysql导入sql脚本、增删改数据库、数据表,超详细图解

    为方便查看,建议使用右侧目录 一.导入sql脚本 source 二.数据库操作 create 增 use 使用 三.数据表操作 表结构(DDL) create 新建 drop 删 alter 增.改 ...

  3. java linux mysql数据库_Linux Java连接MySQL数据库

    Linux(Ubuntu平台)Java通过JDBC连接MySQL数据库,与Windows平台类似,步骤如下: 解压 jdbc: tar -zxvf mysql-connector-java-5.1.1 ...

  4. java的netbeans数据库,使用 Java DB (Derby) 数据库

    使用 Java DB (Derby) 数据库 This tutorial needs a review. You can open a JIRA issue, or edit it in GitHub ...

  5. 利用EA根据sql脚本生成数据库文档

    强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan [前言] 最近接到一个任务,通过数据库的sql脚本生成相应的数据库文档,表的数量比较多,手动写是 ...

  6. java连接mysql数据库 R,java连接MySql数据库!

    package com.roytel.rtccp.util; import java.sql.*; public class DBManager { //用户名 private String user ...

  7. 用JAVA使用mysql命令操作导入SQL脚本

    package data;import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWri ...

  8. 2021年Java面经分享:mysql命令行导入sql文件

    四面阿里 面试岗位是研发工程师,直接找蚂蚁金服的大佬进行内推,参与了阿里巴巴中间件部门的提前批面试,一共经历了四次面试,拿到了口头offer. 一面: 自我介绍 项目中做了什么,难点呢. Java的线 ...

  9. 数据库损坏了怎么办?——完全备份及恢复、增量备份及恢复

    文章目录 一.数据库备份的分类 1.数据备份的重要性 2.数据库备份的分类-1 3.数据库备份的分类-2 4.常见的备份方法 二.MySQL完全备份与恢复 1.MySQL完全备份-1 2.MySQL完 ...

最新文章

  1. 蚂蚁集团研究员王益:Go+ 可有效补全 Python 的不足
  2. 「小程序JAVA实战」小程序我的个人信息页面开发(41)
  3. ecshop商品详细描述调用商品相册代码
  4. python生成条形码
  5. frame 2 opencv mat
  6. 2017-3-19四校联考
  7. 检测系列--RCNN系列
  8. java元注解 @Documented注解使用
  9. 【dlib库】进行人脸检测+人脸关键点检测+人脸对齐
  10. 一种保护应用程序的方法 模拟Windows PE加载器,从内存资源中加载DLL
  11. C#进阶系列——WebApi 路由机制剖析:你准备好了吗?
  12. linux下终端快捷键
  13. 一个被忽视的强大搜图技能——以图搜图
  14. 计算机如何设定远程,电脑远程控制功能怎么设置
  15. shell 编程中空格的使用
  16. B站哔哩哔哩:11 月 22 日上午九时正起恢复在香港联交所买卖
  17. 尼古拉·特斯拉,到底有多神?
  18. java里getter和setter的作用和区别是什么?
  19. 单硬盘双 Win10 系统安装简明流程【是双 Win10 不是 Win+Linux】
  20. LaTeX之使用parcolumns宏包实现双栏排版示例

热门文章

  1. animate.css动画样式详解
  2. python找不到csv文件_Python如何读取csv文件
  3. 5.1.2全景声音箱摆位_如何体验全景声
  4. java解码p7b证书文件,通过OpenSSL解码X509证书文件
  5. DOM操作案例之--全选与反选
  6. flask总结之session,websocket,上下文管理
  7. jsp输出所有请求头的名称
  8. 手机端input[type=date]的placeholder不起作用
  9. Event Loop 其实也就这点事
  10. [译文]过犹不及,别再在编程中高射炮打蚊子