利用Java進行MySql資料庫的匯入和匯出

y_keven發表於2014-07-15

利用Java來進行Mysql資料庫的匯入和匯出的總體思想是通過Java來呼叫命令視窗執行相應的命令。

 

MySql匯出資料庫的命令如下:

Sql程式碼  收藏程式碼
  1. mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath  

利用Java呼叫命令視窗執行命令來進行MySql匯入資料庫一般分三步走:

第一步:登入Mysql資料庫,在登入資料庫的時候也可以指定登入到哪個資料庫,如果指定了則可以跳過第二步;

第二步:切換資料庫到需要匯入的目標資料庫

第三步:利用命令開始匯入

 

在進行匯出的時候,需要注意命令語句的執行環境,如果已經將mysql安裝路徑下的bin加入到

系統的path變數中,那麼在匯出的時候可以直接使用命令語句,否則,就需要在執行命令語句的

時候加上命令所在位置的路徑,即mysql安裝路徑想的bin下的mysqldump命令。

 

基本程式碼如下:

Java程式碼  收藏程式碼
  1. import java.io.IOException;  
  2. import java.io.InputStream;  
  3. import java.io.OutputStream;  
  4. import java.io.OutputStreamWriter;  
  5. import java.util.Properties;  
  6.   
  7. /** 
  8.  * 在進行匯出的時候,需要注意命令語句的執行環境,如果已經將mysql安裝路徑下的bin加入到 
  9.  * 系統的path變數中,那麼在匯出的時候可以直接使用命令語句,否則,就需要在執行命令語句的 
  10.  * 時候加上命令所在位置的路徑,即mysql安裝路徑想的bin下的mysqldump命令 
  11.  * @author andy 
  12.  * 
  13.  */  
  14. public class MySqlImportAndExport {  
  15.   
  16.     public static void main(String args[]) throws IOException {  
  17.         InputStream is = MySqlImportAndExport.class.getClassLoader().getResourceAsStream("jdbc.properties");  
  18.         Properties properties = new Properties();  
  19.         properties.load(is);  
  20. //      MySqlImportAndExport.export(properties);//這裡簡單點異常我就直接往上拋  
  21.         MySqlImportAndExport.importSql(properties);  
  22.     }  
  23.       
  24.     /** 
  25.      * 根據屬性檔案的配置匯出指定位置的指定資料庫到指定位置 
  26.      * @param properties 
  27.      * @throws IOException 
  28.      */  
  29.     public static void export(Properties properties) throws IOException {  
  30.         Runtime runtime = Runtime.getRuntime();  
  31.         String command = getExportCommand(properties);  
  32.         runtime.exec(command);//這裡簡單一點異常我就直接往上拋  
  33.     }  
  34.       
  35.     /** 
  36.      * 根據屬性檔案的配置把指定位置的指定檔案內容匯入到指定的資料庫中 
  37.      * 在命令視窗進行mysql的資料庫匯入一般分三步走: 
  38.      * 第一步是登到到mysql; mysql -uusername -ppassword -hhost -Pport -DdatabaseName;如果在登入的時候指定了資料庫名則會 
  39.      * 直接轉向該資料庫,這樣就可以跳過第二步,直接第三步;  
  40.      * 第二步是切換到匯入的目標資料庫;use importDatabaseName; 
  41.      * 第三步是開始從目標檔案匯入資料到目標資料庫;source importPath; 
  42.      * @param properties 
  43.      * @throws IOException  
  44.      */  
  45.     public static void importSql(Properties properties) throws IOException {  
  46.         Runtime runtime = Runtime.getRuntime();  
  47.         //因為在命令視窗進行mysql資料庫的匯入一般分三步走,所以所執行的命令將以字串陣列的形式出現  
  48.         String cmdarray[] = getImportCommand(properties);//根據屬性檔案的配置獲取資料庫匯入所需的命令,組成一個陣列  
  49.         //runtime.exec(cmdarray);//這裡也是簡單的直接丟擲異常  
  50.         Process process = runtime.exec(cmdarray[0]);  
  51.         //執行了第一條命令以後已經登入到mysql了,所以之後就是利用mysql的命令視窗  
  52.         //程式執行後面的程式碼  
  53.         OutputStream os = process.getOutputStream();  
  54.         OutputStreamWriter writer = new OutputStreamWriter(os);  
  55.         //命令1和命令2要放在一起執行  
  56.         writer.write(cmdarray[1] + "\r\n" + cmdarray[2]);  
  57.         writer.flush();  
  58.         writer.close();  
  59.         os.close();  
  60.     }  
  61.       
  62.     /** 
  63.      * 利用屬性檔案提供的配置來拼裝命令語句 
  64.      * 在拼裝命令語句的時候有一點是需要注意的:一般我們在命令視窗直接使用命令來 
  65.      * 進行匯出的時候可以簡單使用“>”來表示匯出到什麼地方,即mysqldump -uusername -ppassword databaseName > exportPath, 
  66.      * 但在Java中這樣寫是不行的,它需要你用-r明確的指出匯出到什麼地方,如: 
  67.      * mysqldump -uusername -ppassword databaseName -r exportPath。 
  68.      * @param properties 
  69.      * @return 
  70.      */  
  71.     private static String getExportCommand(Properties properties) {  
  72.         StringBuffer command = new StringBuffer();  
  73.         String username = properties.getProperty("jdbc.username");//使用者名稱  
  74.         String password = properties.getProperty("jdbc.password");//使用者密碼  
  75.         String exportDatabaseName = properties.getProperty("jdbc.exportDatabaseName");//需要匯出的資料庫名  
  76.         String host = properties.getProperty("jdbc.host");//從哪個主機匯出資料庫,如果沒有指定這個值,則預設取localhost  
  77.         String port = properties.getProperty("jdbc.port");//使用的埠號  
  78.         String exportPath = properties.getProperty("jdbc.exportPath");//匯出路徑  
  79.           
  80.         //注意哪些地方要空格,哪些不要空格  
  81.         command.append("mysqldump -u").append(username).append(" -p").append(password)//密碼是用的小p,而埠是用的大P。  
  82.         .append(" -h").append(host).append(" -P").append(port).append(" ").append(exportDatabaseName).append(" -r ").append(exportPath);  
  83.         return command.toString();  
  84.     }  
  85.       
  86.     /** 
  87.      * 根據屬性檔案的配置,分三步走獲取從目標檔案匯入資料到目標資料庫所需的命令 
  88.      * 如果在登入的時候指定了資料庫名則會 
  89.      * 直接轉向該資料庫,這樣就可以跳過第二步,直接第三步;  
  90.      * @param properties 
  91.      * @return 
  92.      */  
  93.     private static String[] getImportCommand(Properties properties) {  
  94.         String username = properties.getProperty("jdbc.username");//使用者名稱  
  95.         String password = properties.getProperty("jdbc.password");//密碼  
  96.         String host = properties.getProperty("jdbc.host");//匯入的目標資料庫所在的主機  
  97.         String port = properties.getProperty("jdbc.port");//使用的埠號  
  98.         String importDatabaseName = properties.getProperty("jdbc.importDatabaseName");//匯入的目標資料庫的名稱  
  99.         String importPath = properties.getProperty("jdbc.importPath");//匯入的目標檔案所在的位置  
  100.         //第一步,獲取登入命令語句  
  101.         String loginCommand = new StringBuffer().append("mysql -u").append(username).append(" -p").append(password).append(" -h").append(host)  
  102.         .append(" -P").append(port).toString();  
  103.         //第二步,獲取切換資料庫到目標資料庫的命令語句  
  104.         String switchCommand = new StringBuffer("use ").append(importDatabaseName).toString();  
  105.         //第三步,獲取匯入的命令語句  
  106.         String importCommand = new StringBuffer("source ").append(importPath).toString();  
  107.         //需要返回的命令語句陣列  
  108.         String[] commands = new String[] {loginCommand, switchCommand, importCommand};  
  109.         return commands;  
  110.     }  
  111.       
  112. }  

 

 

上述使用的jdbc.properties檔案

Properties程式碼  收藏程式碼
  1. jdbc.username=root  
  2. jdbc.password=password  
  3. jdbc.host=localhost  
  4. jdbc.port=3306  
  5. jdbc.exportDatabaseName=dbName  
  6. jdbc.exportPath=d\:\\dbName.sql  
  7. jdbc.importDatabaseName=test  
  8. jdbc.importPath=d\:\\dbName.sql 

相關文章