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导入导出数据库文件详解 #### 一、引言 在数据库管理中,数据库的导入与导出是一项非常重要的工作。它可以帮助我们备份现有的数据、迁移数据到新的服务器或恢复丢失的数据。对于MySQL这样的关系型数据库...
在IT行业中,数据库...总之,熟练掌握MySQL的导入导出命令对于数据库管理员来说是必不可少的技能。通过`mysqldump`和`mysql`命令,你可以高效、灵活地管理和恢复数据库,同时结合脚本自动化这些流程,提高工作效率。
总结,MySQL的导入导出功能是数据库管理的关键环节,熟练掌握这些技巧可以帮助我们更有效地备份和迁移数据。在实际操作中,要根据具体需求选择合适的方法,并注意性能优化,以实现高效的数据管理。
在Java编程中,调用MySQL命令...综上所述,Java调用MySQL命令导入导出数据库涉及到了JDBC接口的使用、系统命令的执行以及数据库管理的基本操作。在实际应用中,我们还需要关注错误处理、安全性以及依赖管理等多个方面。
本篇文章将深入探讨如何在MySQL中导入和导出数据库文件,包括使用图形化辅助工具和命令行方式。 首先,我们可以利用MySQL GUI Tools v5.0这样的图形化界面来简化数据库管理任务。这个工具包包含四个主要的应用程序...
MYSQL 数据库导入导出命令 MySQL 数据库导入导出命令是数据库管理员和开发者经常使用的命令,用于将 MySQL 数据库导出到文件中,以便备份、还原或迁移到其他服务器。下面将详细介绍 MySQL 数据库导入导出的命令和...
Linux 下 MySQL 数据库导入导出命令大汇总 Linux 作为一个广泛应用于服务器操作系统的平台,MySQL 作为一个流行的关系数据库管理系统,在 Linux 下的使用非常广泛。因此,掌握 Linux 下 MySQL 数据库的导入导出命令...
MySQL是世界上最流行的关系型数据库管理系统之一,用于存储和管理数据。在日常的数据库管理工作中,导入和导出数据库或数据表是...通过熟练掌握这些MySQL的导入导出技巧,你可以有效地管理和维护数据库,提高工作效率。
在进行数据库管理时,MySQL提供了丰富的命令行工具用于数据库的导入导出操作。对于这些操作,尤其需要掌握的是mysqldump命令和MySQL的Source命令的使用方法。 首先,mysqldump是MySQL用于备份数据库的命令行工具。...
### 导入导出数据库 MySQL 快速上手 在日常的数据库管理工作中,经常会遇到需要备份或迁移数据的情况。MySQL 提供了多种工具来帮助我们进行数据的导入与导出,其中最常用的就是 `mysqldump` 命令。本篇文章将详细...
MySQL是世界上最流行的开源关系型数据库管理系统之一,它提供了丰富的功能,包括数据导入导出、数据库管理以及复杂的查询操作。在数据库开发和维护中,经常需要进行数据的备份和迁移,这就涉及到了导入导出功能。...
MySQL命令行工具是数据库管理员和开发人员常用的管理数据库的方式之一,尤其在进行数据库的导入导出操作时。这里我们将详细讲解如何在命令行环境中执行这些操作。 首先,我们需要理解两个主要的MySQL命令行工具:`...
标题中的“mariadb导入导出mysql数据库的脚本”是指使用特定的脚本来实现MySQL或MariaDB数据库的导入和导出操作。这种脚本的优点在于可以自动化处理数据库的创建、表结构导入以及数据记录的插入,从而节省手动操作的...
首先,我们来看**SQL脚本形式**的导入导出方法,这是推荐的方式,因为它能确保在不同环境下保持兼容性。 **导出SQL脚本**: 1. 使用`phpMyAdmin`工具:在工具的导出选项中,确保选择“结构”和“数据”,避免勾选...