java导出mysql数据库失败_利用Java进行MySql数据库的导入和导出
利用Java来进行Mysql数据库的导入和导出的总体思想是通过Java来调用命令窗口执行相应的命令。
MySql导出数据库的命令如下:
mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath
利用Java调用命令窗口执行命令来进行MySql导入数据库一般分三步走:
第一步:登录Mysql数据库,在登录数据库的时候也可以指定登录到哪个数据库,如果指定了则可以跳过第二步;
第二步:切换数据库到需要导入的目标数据库
第三步:利用命令开始导入
在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令。
基本代码如下:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Properties;
/**
* 在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到
* 系统的path变量中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的
* 时候加上命令所在位置的路径,即mysql安装路径想的bin下的mysqldump命令
* @author andy
*
*/
public class MySqlImportAndExport {
public static void main(String args[]) throws IOException {
InputStream is = MySqlImportAndExport.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
// MySqlImportAndExport.export(properties);//这里简单点异常我就直接往上抛
MySqlImportAndExport.importSql(properties);
}
/**
* 根据属性文件的配置导出指定位置的指定数据库到指定位置
* @param properties
* @throws IOException
*/
public static void export(Properties properties) throws IOException {
Runtime runtime = Runtime.getRuntime();
String command = getExportCommand(properties);
runtime.exec(command);//这里简单一点异常我就直接往上抛
}
/**
* 根据属性文件的配置把指定位置的指定文件内容导入到指定的数据库中
* 在命令窗口进行mysql的数据库导入一般分三步走:
* 第一步是登到到mysql;mysql -uusername -ppassword -hhost -Pport -DdatabaseName;如果在登录的时候指定了数据库名则会
* 直接转向该数据库,这样就可以跳过第二步,直接第三步;
* 第二步是切换到导入的目标数据库;use importDatabaseName;
* 第三步是开始从目标文件导入数据到目标数据库;source importPath;
* @param properties
* @throws IOException
*/
public static void importSql(Properties properties) throws IOException {
Runtime runtime = Runtime.getRuntime();
//因为在命令窗口进行mysql数据库的导入一般分三步走,所以所执行的命令将以字符串数组的形式出现
String cmdarray[] = getImportCommand(properties);//根据属性文件的配置获取数据库导入所需的命令,组成一个数组
//runtime.exec(cmdarray);//这里也是简单的直接抛出异常
Process process = runtime.exec(cmdarray[0]);
//执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口
//进程执行后面的代码
OutputStream os = process.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(os);
//命令1和命令2要放在一起执行
writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);
writer.flush();
writer.close();
os.close();
}
/**
* 利用属性文件提供的配置来拼装命令语句
* 在拼装命令语句的时候有一点是需要注意的:一般我们在命令窗口直接使用命令来
* 进行导出的时候可以简单使用“>”来表示导出到什么地方,即mysqldump -uusername -ppassword databaseName > exportPath,
* 但在Java中这样写是不行的,它需要你用-r明确的指出导出到什么地方,如:
* mysqldump -uusername -ppassword databaseName -r exportPath。
* @param properties
* @return
*/
private static String getExportCommand(Properties properties) {
StringBuffer command = new StringBuffer();
String username = properties.getProperty("jdbc.username");//用户名
String password = properties.getProperty("jdbc.password");//用户密码
String exportDatabaseName = properties.getProperty("jdbc.exportDatabaseName");//需要导出的数据库名
String host = properties.getProperty("jdbc.host");//从哪个主机导出数据库,如果没有指定这个值,则默认取localhost
String port = properties.getProperty("jdbc.port");//使用的端口号
String exportPath = properties.getProperty("jdbc.exportPath");//导出路径
//注意哪些地方要空格,哪些不要空格
command.append("mysqldump -u").append(username).append(" -p").append(password)//密码是用的小p,而端口是用的大P。
.append(" -h").append(host).append(" -P").append(port).append(" ").append(exportDatabaseName).append(" -r ").append(exportPath);
return command.toString();
}
/**
* 根据属性文件的配置,分三步走获取从目标文件导入数据到目标数据库所需的命令
* 如果在登录的时候指定了数据库名则会
* 直接转向该数据库,这样就可以跳过第二步,直接第三步;
* @param properties
* @return
*/
private static String[] getImportCommand(Properties properties) {
String username = properties.getProperty("jdbc.username");//用户名
String password = properties.getProperty("jdbc.password");//密码
String host = properties.getProperty("jdbc.host");//导入的目标数据库所在的主机
String port = properties.getProperty("jdbc.port");//使用的端口号
String importDatabaseName = properties.getProperty("jdbc.importDatabaseName");//导入的目标数据库的名称
String importPath = properties.getProperty("jdbc.importPath");//导入的目标文件所在的位置
//第一步,获取登录命令语句
String loginCommand = new StringBuffer().append("mysql -u").append(username).append(" -p").append(password).append(" -h").append(host)
.append(" -P").append(port).toString();
//第二步,获取切换数据库到目标数据库的命令语句
String switchCommand = new StringBuffer("use ").append(importDatabaseName).toString();
//第三步,获取导入的命令语句
String importCommand = new StringBuffer("source ").append(importPath).toString();
//需要返回的命令语句数组
String[] commands = new String[] {loginCommand, switchCommand, importCommand};
return commands;
}
}
上述使用的jdbc.properties文件
jdbc.username=root
jdbc.password=password
jdbc.host=localhost
jdbc.port=3306
jdbc.exportDatabaseName=dbName
jdbc.exportPath=d\:\\dbName.sql
jdbc.importDatabaseName=test
jdbc.importPath=d\:\\dbName.sql
java导出mysql数据库失败_利用Java进行MySql数据库的导入和导出相关推荐
- java mysql jdbc 封装_利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包括增删改查、JavaBean反射原理,附源代码)...
近期看老罗的视频,跟着完毕了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完毕对数据库的增删改查.当中查询这块,包含普通的查询和利用反射完毕的查询,主要包含以下几个函数接口 ...
- java se好用吗_利用 Java SE 7 更好地管理资源
2011 年 5 月发布 作者:Julien Ponge 本文介绍 Java 7 针对自动资源管理问题给出的解决办法,即 Coin 项目中提出的新语言结构 try-with-resources 语句. ...
- java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...
利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置, 目的: (学习视频分享:java视频教程 实现代码如下: 导入Java.util.收藏品: 导入Java.util.LinkedLi ...
- 在java里四舍五入怎么做_利用java怎么实现一个四舍五入功能
利用java怎么实现一个四舍五入功能 发布时间:2020-12-02 16:46:08 来源:亿速云 阅读:68 作者:Leah 这期内容当中小编将会给大家带来有关利用java怎么实现一个四舍五入功能 ...
- java运用到的单词_利用Java怎么实现一个单词提取功能
利用Java怎么实现一个单词提取功能 发布时间:2020-12-08 17:07:00 来源:亿速云 阅读:65 作者:Leah 这篇文章给大家介绍利用Java怎么实现一个单词提取功能,内容非常详细, ...
- java反序列化漏洞POP查找_利用 Java 反序列化漏洞在受限环境下获取反向 Shell
原标题:利用 Java 反序列化漏洞在受限环境下获取反向 Shell 原文链接: https://medium.com/abn-amro-red-team/java-deserialization-f ...
- java 怎么做302重定向_利用Java怎么获取302重定向后的URL
利用Java怎么获取302重定向后的URL 发布时间:2021-01-22 16:59:02 来源:亿速云 阅读:57 作者:Leah 本篇文章为大家展示了利用Java怎么获取302重定向后的URL, ...
- jira mysql 启动 失败_重启机器导致mysql启动失败
一.问题 二.常见解决方案 网上的解决方法大致为 ①空间不足(df -h 查看) ②权限不足(/var/lib文件夹)chown -R mysql:mysql /vdb1/lib/ ③修改my.cnf ...
- java filter 返回错误消息_利用java filter 实现业务异常拦截 跳转到错误信息提示页面...
1.缘由:我们在做项目中肯定都会遇到自定义业务异常 ,然后将业务异常信息跳转的统一的信息提示页面的情况,比如我们在struts的时候我们会用到struts的异常处理机制,我们在业务层会跑出我们遇到业务 ...
最新文章
- XIII Open Grodno SU Championship
- Moonlight已经可以下载,目前是0.6版
- 揽货最短路径解决方案算法 - C# 蚁群优化算法实现
- linux 启动nacos报错_Spring Cloud:Alibaba 之 Nacos
- 从零开始学Pytorch(十五)之数据增强
- effective python 90个有效方法_Effective Python:编写高质量Python代码的90个有效方法(原书第2版)...
- 收藏=学会 前端小程序开源项目121个
- 使用SSH连接linux服务器重启Tomcat服务
- BugKu CTF(杂项篇MISC)—啊哒
- XXE实体注入漏洞详解
- 据消息称小米显示器34寸带鱼屏即将暂停销售:因为三星屏幕停止供应。
- linux 查找某个程序,Linux查找特定程序whereis实例详解
- springboot整合redisson实现分布式锁
- ACL 2020 | 特定风格标题生成《Hooks in the headline》论文阅读笔记
- opensips3.0之新工具opensips-cli
- Web前端html5+css3前端开发入门学习笔记
- 6个不可多得的黑科技网站,让你在办公中如有神助,请低调收藏
- 阿里聚安全受邀参加SFDC安全大会,分享互联网业务面临问题和安全创新实践
- (D)TLS1.3大揭秘之密码技术
- 前端程序员项目里常用的utils.js工具函数
热门文章
- Docker最全教程之Go实战,墙裂推荐(十九)
- C# Memory Cache 踩坑记录
- ASP.NET Core中使用GraphQL - 第一章 Hello World
- 快速搭建CentOS+ASP.NET Core环境支持WebSocket
- TypeScript 2.7 版本发布
- Entity Framework Core Like 查询揭秘
- 在收购 Sun 的六年后,Oracle 终于瞄准了 Java 的非付费用户
- 缺氧游戏黑科技计算机,《缺氧》游戏内参数修改图文详解
- java 1.7的新特性_[Java] JDK 1.7版本的 新特性
- 数据结构与算法:终于可以用三种语言(C,C#,JavaScript)把图的广度优先遍历讲清楚了(推荐收藏)