如何利用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數據庫、導入和導出
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解