我正在制作一个程序,我将从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个空格。 我的所有文本文件都有特定的字段,但它们之间的分隔空格是未知的。有没有办法读取所有这些空格,直到找到包含数据的下一列?
答案 0 :(得分:3)
有很多方法可以做到这一点。一种是一次读取一行文件,然后使用String.split(regex)
将行拆分为字段; e.g。
String line = ...
String fields[] = line.split("\\s+");
然后重写SQL,以便一次插入一行。
或者更好的是,使用批次;例如如下所述:http://viralpatel.net/blogs/batch-insert-in-java-jdbc/
答案 1 :(得分:0)
我认为应该指定文本文件如何包含空格或带有tab的数据,简而言之应该是某种统一性,因为sql loader terminated by
只使用一个参数来标识列。