1

私はmysqlテーブルのtxtファイルからデータをロードするプログラムを作成しています。特定のフィールドを持つテーブルを作成し、それらのtxtファイルからデータをロードします。プログラムを実行するためにJavaを使用しています。

私が書いたものは以下のとおりです。

private static String importData(Connection con, File txtFile,
    String tablename) {

  try {
    Statement stmt;

    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
            ResultSet.CONCUR_UPDATABLE);
    String path = txtFile.getAbsolutePath();
    String importingdata = "LOAD DATA INFILE '"
            + path.replace('\\', '/')
            + "' INTO TABLE " + tablename
            + " FIELDS TERMINATED BY '\t'";
    System.out.println("fill the table");
    stmt.executeUpdate(importingdata);

    } catch (Exception e) {
    System.out.println(((SQLException) e).getSQLState());
    System.out.println(e.getMessage());
    e.printStackTrace();

     }
   return null;
    }

しかし、ご覧のとおり、このコードでは、フィールドがタブで終了していると述べています。テキスト ファイルの列がスペースとタブの両方で区切られていて、それらの数が不明な場合はどうなりますか?

たとえば、画像に表示されているテキスト:

ここに画像の説明を入力

最初の列は 2 番目の列と 1 つのタブと 3 つのスペースで区切られており、2 番目の列と 3 番目の列は 2 つのスペースで区切られています。すべてのテキスト ファイルには特定のフィールドがありますが、それらの間のスペースが不明です。データを含む次の列が見つかるまで、これらすべてのスペースを読み取る方法はありますか?

4

2 に答える 2

3

これを行うには多くの方法があります。1 つは、一度に 1 行ずつファイルを読み取り、次にString.split(regex);を使用して行をフィールドに分割することです。例えば

    String line = ...
    String fields[] = line.split("\\s+");

次に、一度に 1 行ずつ挿入できるように SQL を書き直します。

または、さらに良いのは、バッチを使用することです。たとえば、ここで説明されているように: http://viralpatel.net/blogs/batch-insert-in-java-jdbc/

于 2013-06-13T10:27:53.253 に答える