0

我有一堆文本文件,其中保存了所有存储过程、表定义、插入语句和类似的东西。如果我有 5 个文件,那么我必须像这样输入所有 5 行代码:

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

好吧,我可以解决这个问题并制作另一个文本文件,将其命名为 main.sql之类的东西,我将在其中放置所有这 5 行代码,如果我想执行这 5 个文件,我只需要输入这个简单的行:

\. C:/project/main.sql

但是这样做的问题是,如果我将所有这些文件移动到另一个位置或只是重命名存储这些文件的文件夹,我将不得不更改所有这 5 行中的路径字符串。例如,如果我要将文件夹项目的位置更改为类似projects/application1/的位置,我将不得不重新键入几乎整个内容:

\. 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)
4

1 回答 1

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();
        }
    }
}
于 2013-04-17T03:07:37.077 回答