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 行すべてのパス文字列を変更する必要があることです。たとえば、フォルダーprojectの場所を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

さて、問題は、すでにお察しのとおり、ファイルを移動したい場合にコードを 1 行変更するだけで済むように、この問題をすべて解決する方法です。私はこのようなことを試しましたが、うまくいきませんでした:

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 に答える