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;
    }

但是在这段代码中,正如你所看到的,我说过这些字段是由制表符终止的。如果文本文件中的列被空格和制表符分隔,数量未知怎么办?

例如图像中显示的文本:

在此处输入图像描述

第一列与第二列由一个制表符和 3 个空格分隔,第二列与第三列由 2 个空格分隔。我所有的文本文件都有特定的字段,但它们之间的分隔空格是未知的。有没有办法读取所有这些空间,直到找到包含数据的下一列?

4

2 回答 2

3

有很多方法可以做到这一点。String.split(regex)一种是一次读取文件一行,然后使用;将行拆分为字段。例如

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

然后重写 SQL 以便一次插入一行。

或者更好的是,使用批次;例如这里描述:http: //viralpatel.net/blogs/batch-insert-in-java-jdbc/

于 2013-06-13T10:27:53.253 回答
0

我认为你应该指定你的文本文件如何包含带有空格或标签的数据,简而言之,应该有某种一致性,因为 sql 加载器terminated by 只使用一个参数来标识列。

于 2013-06-13T10:19:44.933 回答