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数据库的导入和导出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曾被罗永浩称为设计最佳的手机:曝real
- 下一篇: 6大原厂减少为5家 SK海力士90亿美元