我实际上需要创建一个包含421列的数据库并创建它。现在我必须使用Java程序将数据加载到数据库中。我需要输入到数据库中的数据存在于文本文件中。文本文件中的值由空格/制表符分隔,或者可以是两者。如何从此文本文件中提取数据,以便在column1下输入第一个值,在第2列下输入第二个值,依此类推....列421下的第421个值和第1列下的第422个值,依此类推。我在文件处理和java解析方面很差,所以请帮忙。
答案 0 :(得分:0)
为什么你不用sql语句?下面是mysql的例子,我将分隔符显示为tab:
LOAD DATA LOCAL INFILE '/importfile.csv'
INTO TABLE test_table
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(field1, filed2, field3);
http://dev.mysql.com/doc/refman/5.0/en/load-data.html
编辑:
如果分隔符是可选的,也许您可以通过缓冲读取器读取分析?我没有检查代码,但你可以写这样的东西,并在循环中检查文本。我已将所有选项卡替换为空格,然后我使用分隔符作为空格,但如果您的值包含空格,那么它就是问题
BufferedReader br = new BufferedReader(new FileReader("myText.txt"));
String s;
while((s=br.ReadLine)!= null){
s.replace("\t"," ");
String[] sub = s.split(" ");
String statement = "insert into myTable (clm1, clm2, clm3) Values (";
for(int i=0:i<sub.length;i++){
if((i % 420) == 0){
mySqlStatement.ExecuteQuery(statement);
statement = "insert into myTable (clm1, clm2, clm3) Values (";
}
if(i==0){
statement = statement + sub(i);
}else{
statement = statement + "," + sub(i);
}
}
statement = statement + ")";
mySqlStatement.ExecuteQuery(statement);
}
答案 1 :(得分:0)
public static void readFromFile(String pathToFile) {
final BufferedReader reader = getFileReaderInClasspath(pathToFile);
try {
String line = null;
while ((line = reader.readLine()) != null) {
final StringTokenizer tokenizer = new StringTokenizer(line, "\s\t");
final List<String> columns = new ArrayList<String>();
while (tokenizer.hasMoreTokens()) {
columns.add(tokenizer.nextToken());
}
saveIntoDb(columns);
}
reader.close();
} catch (IOException e) {
throw new IllegalArgumentException("Error reading file (" + pathToFile + ")", e);
}
}
显然,您需要实现将列插入数据库的saveIntoDb(List)
方法。
或者,您可以将每个列列表存储到
List<List<String>>
,其中包含所有行,并且仅在流程结束时将所有行添加到数据库中。