java调用mysqldump(java调用mysql执行sql脚本)

  • 1、JAVA调用CMD 导出MYSQL的SQL文件为空,同样的语句在CMD直接调用下可以正确生成文件。
  • 2、怎么从Java客户端调用mysqldump导出数据库
  • 3、如何用java实现mysql数据库的导入导出
  • 4、如何用Java实现MySQL数据库的备份和恢复
  • 5、java mysqldump导出到对应文件夹下,程序执行未报错,但是对应目录下为空?

Runtime.getRuntime().exec(“目录/bin/mysqldump -h localhost -u root -padmin rois2 d:/wewe.sql”);

不写cmd 直接用mysqldump的绝对路径

如这个 Runtime.getRuntime().exec(“d:/mysql/bin/mysqldump -h localhost -u root -padmin rois2 d:/wewe.sql”);

该是一些特殊符被转义了,你可以把mysqldump -u root -proot –opt mysql C:/Users/success/ak.sql 这句写到一个bat文件里面,然后java中就直接调用这个bat文件就可以避免了!

MySql导出数据库的命令如下:

Sql代码

mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName exportPath

mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName exportPath

利用Java调用命令窗口执行命令来进行MySql导入数据库一般分三步走:

第一步:登录Mysql数据库,在登录数据库的时候也可以指定登录到哪个数据库,如果指定了则可以跳过第二步;

第二步:切换数据库到需要导入的目标数据库

第三步:利用命令开始导入

在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到

系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的

时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令。

MySQL的一些前台工具是有备份恢复功能的,可是如何在我们的应用程序中实现这一功能呢?本文提供了示例代码来说明如何使用Java代码实现MySQL数据库的备份恢复。

本次实现是使用了MySQL数据库本身提供的备份命令mysqldump和恢复命令mysql,在java代码中通过从命令行调用这两条命令来实现备份和恢复。备份和恢复所使用的文件都是sql文件。

本代码是参照网上某网友提供的源码完成的。

[java] view plaincopy

package xxx.utils;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

/**

* MySQL数据库的备份与恢复 缺陷:可能会被杀毒软件拦截

*

* @author xxx

* @version xxx

*/

public class DatabaseBackup {

/** MySQL安装目录的Bin目录的绝对路径 */

private String mysqlBinPath;

/** 访问MySQL数据库的用户名 */

private String username;

/** 访问MySQL数据库的密码 */

private String password;

public String getMysqlBinPath() {

return mysqlBinPath;

}

public void setMysqlBinPath(String mysqlBinPath) {

this.mysqlBinPath = mysqlBinPath;

}

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public DatabaseBackup(String mysqlBinPath, String username, String password) {

if (!mysqlBinPath.endsWith(File.separator)) {

mysqlBinPath = mysqlBinPath + File.separator;

}

this.mysqlBinPath = mysqlBinPath;

this.username = username;

this.password = password;

}

/**

* 备份数据库

*

* @param output

* 输出流

* @param dbname

* 要备份的数据库名

*/

public void backup(OutputStream output, String dbname) {

String command = “cmd /c ” + mysqlBinPath + “mysqldump -u” + username

+ ” -p” + password + ” –set-charset=utf8 ” + dbname;

PrintWriter p = null;

BufferedReader reader = null;

try {

p = new PrintWriter(new OutputStreamWriter(output, “utf8”));

Process process = Runtime.getRuntime().exec(command);

InputStreamReader inputStreamReader = new InputStreamReader(process

.getInputStream(), “utf8”);

reader = new BufferedReader(inputStreamReader);

String line = null;

while ((line = reader.readLine()) != null) {

p.println(line);

}

p.flush();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

if (reader != null) {

reader.close();

}

if (p != null) {

p.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 备份数据库,如果指定路径的文件不存在会自动生成

*

* @param dest

* 备份文件的路径

* @param dbname

* 要备份的数据库

*/

public void backup(String dest, String dbname) {

try {

OutputStream out = new FileOutputStream(dest);

backup(out, dbname);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

/**

* 恢复数据库

*

* @param input

* 输入流

* @param dbname

* 数据库名

*/

public void restore(InputStream input, String dbname) {

String command = “cmd /c ” + mysqlBinPath + “mysql -u” + username

+ ” -p” + password + ” ” + dbname;

try {

Process process = Runtime.getRuntime().exec(command);

OutputStream out = process.getOutputStream();

String line = null;

String outStr = null;

StringBuffer sb = new StringBuffer(“”);

BufferedReader br = new BufferedReader(new InputStreamReader(input,

“utf8”));

while ((line = br.readLine()) != null) {

sb.append(line + “/r/n”);

}

outStr = sb.toString();

OutputStreamWriter writer = new OutputStreamWriter(out, “utf8”);

writer.write(outStr);

writer.flush();

out.close();

br.close();

writer.close();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 恢复数据库

*

* @param dest

* 备份文件的路径

* @param dbname

* 数据库名

*/

public void restore(String dest, String dbname) {

try {

InputStream input = new FileInputStream(dest);

restore(input, dbname);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

public static void main(String[] args) {

Configuration config = HibernateSessionFactory.getConfiguration();

String binPath = config.getProperty(“mysql.binpath”);

String userName = config.getProperty(“connection.username”);

String pwd = config.getProperty(“connection.password”);

DatabaseBackup bak = new DatabaseBackup(binPath, userName, pwd);

bak.backup(“c:/ttt.sql”, “ttt”);

bak.restore(“c:/ttt.sql”, “ttt”);

}

}

最后的main方法只是一个简单的使用方法的示例代码。

本人所做的项目是使用了hibernate的,而这里需要提供MySQL的bin路径和用户名、密码,而hibernate.cfg.xml中本身就是需要配置数据库的用户名和密码,所以我把MySQL的bin路径也直接配置到了这个文件里面,也不需要创建专门的配置文件,不需要写读取配置文件的接口了。

如果不明白,可以去看hibernate.cfg.xml的说明,里面是可以配置其他的property的

把Process的结果读出来,才能看到是否导出错误,执行语句成功,不等于导出成功。

原创文章,作者:GRDI9,如若转载,请注明出处:https://www.506064.com/n/126897.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
GRDI9的头像GRDI9
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Python脚本控制其他软件

    Python作为一种简单易学、功能强大的脚本语言,具有广泛的应用领域,在自动化测试、Web开发、数据挖掘等领域都得到了广泛的应用。其中,Python脚本控制其他软件也是Python…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论