实际原理是利用java中的runtime类来开启操作系统的命令行进程执行导出导入数据库的dos命令来完成的
1.了解相关的导入和导出的dos命令
简单介绍一下MYSQL命令:
mysql->CREATE DATABASE dbname;//创建数据库
mysql->CREATE TABLE tablename;//创建表
mysql->SHOW DATABASES;//显示数据库信息,有那些可用的数据库。
mysql->USE dbname;//选择数据库
mysql->SHOW TABLES;//显示表信息,有那些可用的表
mysql->DESCRIBE tablename;//显示创建的表的信息
从数据库导出数据库文件:
(1).将数据库mydb导出到e:\mysql\mydb.sql文件中:
打开开始->运行->输入cmd 进入命令行模式
c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql
然后输入密码,等待一会导出就成功了,可以到目标文件中检查是否成功。
(2).将数据库mydb中的mytable导出到e:\mysql\mytable.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb mytable>e:\mysql\mytable.sql
(3).将数据库mydb的结构导出到e:\mysql\mydb_stru.sql文件中:
c:\>mysqldump -h localhost -u root -p mydb --add-drop-table >e:\mysql\mydb_stru.sql
(4)c:\>mysqldump -h localhost -u root -p root mydb >e:\mysql\mydb.sql不需要输入密码即可导入,我们一般使用这条dos命令
案列:a.相关导出的properties配置文件
jdbc.host=127.0.0.1
jdbc.user=root
jdbc.password=root
jdbc.exportDatabaseName=edu
jdbc.port=3306
jdbc.exportPath=e\:\\mysql\\edu.sql
b.导出的方法:
//获取配置文件属性
public Map
Properties pro = new Properties();
Map
InputStreamReader isr=null;
try {
isr = new InputStreamReader(getClass()
.getResourceAsStream(proName),"UTF-8");
pro.load(isr);
@SuppressWarnings("rawtypes")
Enumeration en=pro.propertyNames();
while (en.hasMoreElements()) {
String key=(String) en.nextElement();
String value=pro.getProperty(key);
mpro.put(key, value);
}
return mpro;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
//配置文件路径及导出方法的调用
public static void main(String[] args) {
ExportSql exportSql = new ExportSql();
String proName = "/com/rbb/properties/exportUrl.properties";
Map
exportSql(map);
}
public static void exportSql(Map
String user = map.get("jdbc.user");
String password = map.get("jdbc.password");
String host = map.get("jdbc.host");
String exportDatabaseName = map.get("jdbc.exportDatabaseName");
String exportPath = map.get("jdbc.exportPath");
//使用拼接的方式来完成dos命令
String command = new String("cmd /k mysqldump -u"+user+" -p"+password+" "+exportDatabaseName+" >"+exportPath);
//执行命令行
Runtime runtime = Runtime.getRuntime();
try {
//cmd /k在执行命令后不关掉命令行窗口 cmd /c在执行完命令行后关掉命令行窗口 \\表示转译符也可使用/替代,linux使用/
Process process = runtime.exec(command);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
直到该步骤即可完成指定的sql文件的导出工作
2.java调用dos命令完成sql文件的导入
(1).从外部文件导入数据到数据库中:
从e:\mysql\mydb2.sql中将文件中的SQL语句导入数据库中:
1.从命令行进入mysql,然后用命令CREATE DATABASE mydb2;创建数据库mydb2。
2.退出mysql 可以输入命令exit;或者quit;
3.在CMD中输入下列命令:
c:\>mysql -h localhost -u root -p mydb2 < e:\mysql\mydb2.sql
然后输入密码,就OK了
(2).c:\>mysql -h localhost -u root -p root mydb2 < e:\mysql\mydb2.sql即可完成不需要输入密码的步骤
a.导入sql文件的配置
jdbc.host=127.0.0.1
jdbc.user=root
jdbc.password=root
jdbc.exportDatabaseName=edu
jdbc.port=3306
jdbc.exportPath=e\:\\mysql\\edu.sql
b.开始导入
public Map
Properties pro = new Properties();
Map
InputStreamReader isr=null;
try {
isr = new InputStreamReader(getClass()
.getResourceAsStream(proName),"UTF-8");
pro.load(isr);
@SuppressWarnings("rawtypes")
Enumeration en=pro.propertyNames();
while (en.hasMoreElements()) {
String key=(String) en.nextElement();
String value=pro.getProperty(key);
mpro.put(key, value);
}
return mpro;
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
public static void main(String[] args) {
ExportSql exportSql = new ExportSql();
String proName = "/com/rbb/properties/importUrl.properties";
Map
importSql(map);
}
public static void importSql(Map
String user = map.get("jdbc.user");
String password = map.get("jdbc.password");
String host = map.get("jdbc.host");
String exportDatabaseName = map.get("jdbc.exportDatabaseName");
String exportPath = map.get("jdbc.exportPath");
String command = new String("cmd /k mysql"+" -h"+host+" -u"+user+" -p"+password+" "+exportDatabaseName+" <"+exportPath);
//执行命令行
Runtime runtime = Runtime.getRuntime();
try {
//cmd /k在执行命令后不关掉命令行窗口 cmd /c在执行完命令行后关掉命令行窗口 \\表示转译符也可使用/替代,linux使用/
Process process = runtime.exec(command);
System.out.println("导入成功》》》》》》》》》》》》》》》");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
到此为止即可完成sql文件导入mysql数据库的步骤了