2013-04-17 23 views
0

我有一堆文本文件,我保留所有存儲過程,表格定義,插入語句和類似的東西。如果我有,比方說,5個檔,那我就必須鍵入的所有5行代碼如下所示:如何用MySQL中的source命令一次處理一堆文本文件?

\. C:/project/1.sql 
\. C:/project/2.sql 
\. C:/project/3.sql 
\. C:/project/4.sql 
\. C:/project/5.sql 

好了,我可以解決這個問題,讓另一個文本文件調用它像主.SQL,我會把所有的5行代碼,如果我想執行這些5個文件,我將只需要鍵入這個簡單的一行:

\. C:/project/main.sql 

但這樣做的問題是,如果我移動所有這些文件到另一個位置或者只是重命名那些存儲的文件夾,我將不得不在所有這5行中更改路徑字符串。舉例來說,如果我要更改文件夾項目的位置,像項目/應用1/,我將不得不幾乎重新輸入整個事情:

\. C:/projects/application1/1.sql 
\. C:/projects/application1/2.sql 
\. C:/projects/application1/3.sql 
\. C:/projects/application1/4.sql 
\. C:/projects/application1/5.sql 

現在的問題,因爲你可能已經猜到了,是如何保存所有這些麻煩,以便如果我想移動這些文件,我只需要更改一行代碼?我想是這樣的,但它沒有解決:

SET @PATH = 'C:/projects/application1/'; 

\. SELECT CONCAT(@PATH, 1.sql) 
\. SELECT CONCAT(@PATH, 2.sql) 
\. SELECT CONCAT(@PATH, 3.sql) 
\. SELECT CONCAT(@PATH, 4.sql) 
\. SELECT CONCAT(@PATH, 5.sql) 
+0

爲什麼不寫一個Java應用程序 –

回答

0

在這裏,我寫了一個程序,也許幫助你:)

import java.io.File; 
import java.io.IOException; 

/** 
* Author: NobodyElse 
* Date: 13-4-17 
* Time: 11:00 AM 
* Description: bulk import mysql 
*/ 
public class ImportUtil { 

    public static void main(String[] args) { 

     if (args.length < 3) { 
      System.out.println("Usage:" + ImportUtil.class.getSimpleName() + " filePath dbName dbUser dbPass"); 
      throw new IllegalArgumentException(); 
     } 

     String filePath = args[0]; 
     String dbName = args[1]; 
     String dbUser = args[2]; 
     String dbPass = args[3]; 

     File path = new File(filePath); 
     if (!path.exists() || !path.isDirectory()) { 
      System.out.println(filePath + " not exist OR isn't a directory"); 
      throw new RuntimeException(); 
     } 
     else { 
      File[] files = path.listFiles(); 
      for (File file : files) { 
       String fileName = file.getPath(); 
       if (fileName.endsWith(".sql")) { 
        System.out.println(fileName); 
        execute(fileName, dbName, dbUser, dbPass); 
       } 
      } 
     } 
     System.out.println("ALL DONE!"); 
    } 

    public static void execute(String fileName, String dbName, String dbUser, String dbPass){ 

     String mysqlPath = "cmd /c D:\\Program\" \"Files\\MySQL\\MySQL\" \"Server\" \"5.5\\bin\\mysql.exe"; 

     StringBuffer cmd = new StringBuffer(mysqlPath); 
     cmd.append(" -u").append(dbUser); 
     cmd.append(" -p").append(dbPass).append(" "); 
     cmd.append(dbName).append("<").append(fileName); 

     try { 
      Runtime.getRuntime().exec(cmd.toString()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

嗯,這很酷,但我實際上正在尋找MySQL領域內更簡單的解決方案。不過謝謝。 – Mikhail

相關問題