qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          利用Java進行MySql數據庫的導入和導出

          利用Java進行MySql數據庫的導入和導出

           利用Java來進行Mysql數據庫的導入和導出的總體思想是通過Java來調用命令窗口執行相應的命令。

            MySql導出數據庫的命令如下:

          mysqldump -uusername -ppassword -hhost -Pport exportDatabaseName > exportPath

            利用Java調用命令窗口執行命令來進行MySql導入數據庫一般分三步走:

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

            第二步:切換數據庫到需要導入的目標數據庫

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

            在進行導出的時候,需要注意命令語句的運行環境,如果已經將mysql安裝路徑下的bin加入到系統的path變量中,那么在導出的時候可以直接使用命令語句,否則,就需要在執行命令語句的時候加上命令所在位置的路徑,即mysql安裝路徑想的bin下的mysqldump命令。

            基本代碼如下:

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

            上述使用的jdbc.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

          posted on 2012-02-22 14:58 順其自然EVO 閱讀(282) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2012年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          26272829123
          45678910

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 连江县| 长乐市| 张家界市| 宁河县| 图片| 德清县| 水城县| 朝阳区| 杭州市| 莒南县| 象州县| 沅陵县| 宁津县| 盖州市| 榕江县| 老河口市| 项城市| 塔河县| 定西市| 岑溪市| 武川县| 亚东县| 台江县| 辽阳县| 会同县| 丰台区| 诏安县| 札达县| 沁源县| 泸溪县| 普定县| 临漳县| 铜鼓县| 鹿邑县| 盐源县| 柞水县| 安塞县| 西畴县| 丹巴县| 壤塘县| 神农架林区|