package cn.com;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Properties;
/**
* MySQL导入导出数据库。总体思想是通过Java来调用命令窗口执行相应的命令。
*
* MySql导出数据库命令:mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName
* > exportPath
*
* 导入数据库分三步:
*
* 1.登录Mysql数据库,在登录数据库的时候也可以指定登录到哪个数据库,如果指定了则可以跳过第二步
;
*
* 2.切换数据库到需要导入的目标数据库
*
* 3.利用命令开始导入
*/
public class MySqlImportAndExport {
/**
* 根据属性文件的配置导出数据库
*
* 在进行导出的时候,需要注意命令语句的运行环境,如果已经将mysql安装路径下的bin加入到系
统的path变量
*
* 中,那么在导出的时候可以直接使用命令语句,否则,就需要在执行命令语句的时候加上命令所
在位置的路径,
*
* 即mysql安装路径下的bin下的mysqldump命令。
*
* @param properties
* @throws IOException
*/
public static void export(Properties properties) throws IOException {
Runtime runtime = Runtime.getRuntime();
String command = getExportCommand(properties);
runtime.exec(command);
}
/**
* 根据属性文件的配置把指定位置的指定文件内容导入到指定的数据库中
*
* @param properties
* @throws IOException
*/
public static void importSql(Properties properties) throws IOException {
Runtime runtime = Runtime.getRuntime();
// 因为在命令窗口进行mysql数据库的导入一般分三步走,所以所执行的命令将以字符串数组的形式出现
String cmdarray[] = getImportCommand(properties);
// 执行了第一条命令以后已经登录到mysql了,所以之后就是利用mysql的命令窗口
Process process = runtime.exec(cmdarray[0]);
// 进程执行后面的代码
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");
// 从哪个主机导出数据库,默认取localhost
String host = properties.getProperty("jdbc.host");
// 端口号
String port = properties.getProperty("jdbc.port");
// 导出路径
String exportPath = properties.getProperty("jdbc.exportPath");
// 注意哪些地方要空格,哪些不要空格。密码是用的小p,而端口是用的大P。
command.append("mysqldump -u").append(username).append(" -p")
.append(password).append(" -h").append(host).append(" -P")
.append(port).append(" ").append(exportDatabaseName)
.append(" -r ").append(exportPath);
return command.toString();
}
/**
* 根据属性文件的配置,获取数据库导入所需的命令,组成一个数组
*
* 在命令窗口进行mysql的数据库导入一般分三步走:
*
* 1.登录到mysql数据库。 mysql -uusername -ppassword -hhost -Pport -DdatabaseName;
*
* 如果在登录的时候指定了数据库名则会直接转向该数据库,这样就可以跳过第二步;
*
* 2.切换到需要导入的目标数据库。use importDatabaseName;
*
* 3.从目标文件导入数据到目标数据库。source importPath;
*
* @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;
}
public static void main(String args[]) throws IOException {
// jdbc.properties文件配置
// jdbc.username=root
// jdbc.password=123456
// jdbc.host=localhost
// jdbc.port=3306
// jdbc.exportDatabaseName=school
// jdbc.exportPath=f\:\\school.sql
// jdbc.importDatabaseName=school
// jdbc.importPath=f\:\\school.sql
InputStream is = MySqlImportAndExport.class.getClassLoader()
.getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
properties.load(is);
MySqlImportAndExport.export(properties);
// MySqlImportAndExport.importSql(properties);
}
}
分享到:
相关推荐
MySQL导入导出数据库.pdf
MySQL导入导出数据库文件.pdfMySQL导入导出数据库文件.pdf
数据库的导入导出,MySQL Migration Toolkit:数据库迁移 MySQL Administrator:MySQL管理器 MySQL Query Browser:用于数据查询的图形化客户端 MySQL Workbench:DB Design工具
NULL 博文链接:https://duanfei.iteye.com/blog/801767
主要介绍了mysql 导入导出数据库、数据表的方法,有需要的朋友可以参考一下
NULL 博文链接:https://zhouwenjun.iteye.com/blog/526159
MYSQL专用导入导出工具mysql-front
mysql常用导出数据命令:1.mysql导出整个数据库 mysqldump -hhostname -uusername -ppassword databasename >...2.mysql导出数据库一个表 mysqldump -hhostname -uusername -ppassword database tablename> 导出的文
MySQL命令行导入导出数据库步骤操作 一、利用cmd操作MySQL数据库,导出sql文件 二、利用sql文件,通过cmd使用MySQL命令建立数据库,恢复数据
导入导出数据库 mysql 快速 上手
linux下操作mysql数据库,导出数据库,只导出表结构,只导出数据。大汇总,挺全面的。希望对linux下用mysql数据库导数据的使用提供帮助
在不同操作系统或MySQL版本情况下,直接拷贝文件的方法可能会有不兼容的情况发生。所以一般推荐用SQL脚本形式导入。
mysql数据库导入导出命令mysql数据库导入导出命令
本文介绍关于如何导入导出MySQL数据库的相关操作方法,如导入数据、导出数据等。
第二阶段---MySQL导入导出数据库文件.doc 第二阶段---Mysgl数据类型(字段)介绍.doc 第二阶段---MySQL样例数据库、操作库操作表实例教程.doc 第二阶段---MySQL触发器.pdf 第二阶段---如何导入导出MySQL数据库.doc 第...
mysql数据库导入导出java代码