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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/300686.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用timer控件创建一个简单的报警程序

简介:当我使用计算机工作时,我总是如此的专心致志,以至于每当我过了“一会儿”去看时间时,发现已经过了三个小时,而我却完全没有意识到!所以我决定使用我从Code Project学来的C#技术,来创建一个…

jstl格式化日期

<% page contentType"text/html" pageEncoding"GBK"%> <% page import"java.util.*"%> <% taglib prefix"fmt" uri"http://java.sun.com/jsp/jstl/fmt"%> <html><head><title>国际化标…

FastTunnel - 打造人人都能搭建的内网穿透工具

FastTunnel是用.net core开发的一款跨平台内网穿透工具&#xff0c;它可以实现将内网服务暴露到公网供自己或任何人访问。与其他穿透工具不同的是&#xff1a;FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架&#xff0c;任何人都可以基于该框架二次开发&#x…

一招搞定高等数学! | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅瓜皮儿十三妹没品图一张图让你们看看鲨鱼的血液循环系统到底有多复杂普外科曾医生小猪佩奇其实是“巨猪佩奇”小猪佩奇真实身高为7.1英尺也就是2.16米但她在家还不是最高的一只浪鸭水陆两栖的自行车它出现在1932年的巴黎街头因为加装了…

二、穷举搜索法

穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验&#xff0c;并从众找出那些符合要求的候选解作为问题的解。 【问题】 将A、B、C、D、E、F这六个变量排成如图所示的三角形&#xff0c;这六个变量分别取[1&#xff0c;6]上的整数&#xff0c;且均不相同。求…

恢复Ext3下被删除的文件

下面是这个教程将教你如何在Ext3的文件系统中恢复被rm掉的文件。假设我们有一个文件名叫 ‘test.txt’$ls -il test.txt15 -rw-rw-r– 2 root root 20 Apr 17 12:08 test.txt注意&#xff1a;: “-il” 选项表示显示文件的i-node号&#xff08;15&#xff09;&#xff0c;如果你…

WPF 表格控件 ReoGrid 的简单使用

WPF 表格控件 ReoGrid 的简单使用目录一、概述二、安装三、添加控件四、加载 Excel五、属性设置六、支持触摸滚动七、其它操作1、显示和隐藏列2、显示特定字体八、资源链接独立观察员 2021 年 7 月 9 日一、概述ReoGrid 是一个开源的表格控件库&#xff0c;支持 Winform 和 WPF…

史上最牛空姐,从飞机上掉下愣是没摔死

全世界只有3.14 % 的人关注了青少年数学之旅珠穆朗玛峰最新的测量高度为8844米&#xff0c;人是血肉之躯&#xff0c;一旦从这么高的地方掉下来&#xff0c;别说生还了&#xff0c;能有个全尸就不错了。但是&#xff0c;历史上却有这么以为超级幸运的女人&#xff0c;她从比珠穆…

mysql主主同步冲突_MySQL主主同步主键冲突处理

两台数据库都报slave同步失败了&#xff0c;先说明一下环境&#xff0c;架构&#xff1a;lvskeepalivedamoebamysql&#xff0c;主主复制&#xff0c;单台写入&#xff0c;主1:192.168.0.223(写)主2:192.168.0.230好吧&#xff0c;先show slave status \G看一下同步失败的具体报…

[未来的购碟指南]送给那些以后想收藏真人电影DVD的菜鸟们

随着真人电影在全世界的上映&#xff0c;全世界又掀起了一股新的TF热。对于我们这些铁杆FANS来说&#xff0c;除了肯定要去电影院观影之外&#xff0c;肯定还要收藏一张这部电影的DVD&#xff0c;以达到圆满。本人从2002年开始收藏各种DVD&#xff0c;因此这几年中&#xff0c;…

来聊聊正则表达式

概念正则表达式 是一种匹配输入文本的模式。.Net框架提供了允许这种匹配的正则表达式引擎。模式由一个或多个字符、运算符和结构组成。Regex 类Regex 类用于表示一个正则表达式。下表列出了 Regex 类中一些常用的方法&#xff1a;1 public bool IsMatch( string input ) 指示 R…

nginx对websocket的支持及uliweb chatroom的测试

2019独角兽企业重金招聘Python工程师标准>>> 在尝试在uliweb中使用gevent开发聊天室时&#xff0c;已经在网上搜到nginx是支持websocket的代理的&#xff0c;不过应该不支持集群模式。不过当时没有试过&#xff0c;今天试了一下&#xff0c;在普通的反向代理是没有问…

为什么祖国没有农历生日? | 今日最佳

世界只有3.14 % 的人关注了青少年数学之旅假期计划路线所以为什么没有农历生日所以这个到底是什么字&#xff1f;身体不适&#xff0c;去了趟医院那医生怎么说&#xff1f;......你还敢说养我吗&#xff1f;&#xff08;图源网络&#xff0c;侵权删&#xff09;

ios中amplify配置configure_Nginx源码编译安装及配置文件初步学习

通过源码编译安装。nginx.org #官网地址 # 安装过程 wget http://nginx.org/download/nginx-1.18.0.tar.gz -P /usr/src # tar文件用tar命令解压 tar -zxvf nginx-1.18.0.tar.gz关于wget的-P参数&#xff0c;manual中的解释是prefix&#xff0c;Set directory prefix …

RFID会议签到系统总结(二十一)――服务端的通讯

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />这一篇其实没什么可讲的&#xff0c;只提一下跟客户端不太一样的一些地方。 服务端跟客户端最大的区别是它面对的不是单单一个连接&#xff0c;而是有一些个连接。对于接收与发送…

演示: 动态NAT完成网络地址翻译

演示&#xff1a; 动态NAT完成网络地址翻译技术交流与答疑请加入群&#xff1a;1952289演示目标&#xff1a;使用动态NAT完成对私有网络的地址翻译。演示环境&#xff1a;如下图9.63所示。演示背景&#xff1a;该演示环境保持PAT演示环境的网络基础配置&#xff0c;然后使用动态…

.NET测试用例写的好不好?让变种来测试一下!

为了保证代码能够正常工作&#xff0c;我们常常编写了大量单元测试&#xff0c;并且代码覆盖率也做到了100%。但是在生产环境运行时还是会出问题&#xff01;为什么&#xff1f; 这是因为你没有进行变异测试&#xff01;变异测试变异测试就是把bug&#xff08;变种mutant&#…

你根本想象不到,学霸到底经历过什么

全世界只有3.14 % 的人关注了青少年数学之旅在微信的订阅号中&#xff0c;每人最多有12个常读公众号。可公众号这么多&#xff0c;哪些公众号值得关注呢&#xff1f;今天给大家推荐的几个公众号&#xff0c;不仅生产优质的时效性内容&#xff0c;还会提供各种多元化的内容角度&…

mysql重装远程服务未_MySQL远程连接丢失问题解决方法(Lost connection to MySQL server)...

最近服务器很不稳定&#xff0c;于是重装了mysql 和php 服务&#xff0c;但是接着却遇到了很头疼的麻烦。远程连接mysql是总是提示&#xff1a;Lost connection to MySQL server at ‘reading initial communication packet, system error: 0很明显这是连接初始化阶段就丢失了连…

买基金如何开户

开户主要有两种途径&#xff1a;&#xff08;1&#xff09;投资者通过深交所交易系统认购、买入或卖出上市开放式基金须使用深圳A股账户或深圳证券投资基金账户&#xff08;以下简称“深圳证券账户”&#xff09;。投资者可通过中国结算公司深圳分公司的开户代理机构&#xff0…