【发布时间】:2015-02-25 06:44:14
【问题描述】:
我必须从 CSV 文件中读取记录并将它们存储在 Mysql 数据库中。
我知道“LOAD DATA INFILE”,但在我的情况下,我必须从文件中获取单个记录,检查它是否具有有效的格式/长度等,然后将其存储在数据库中。
// list to store records from CSV file
ArrayList<String> list = new ArrayList<String>();
//Read one line at a time
while ((nextLine = reader.readNext()) != null)
{
for (String number : nextLine)
{
if (number.length() > 12 && number.startsWith("88"))
{
list.add(number);
} else if (number.length() > 9 && number.startsWith("54"))
{
list.add(number);
}
else if (number.length() > 8 && number.startsWith("99"))
{
list.add(number);
}
else
{
// ....
}
// method to insert data in database
insertInToDatabase(list);
}
}
在db中插入记录的方法:taken from here
private void insertInToDatabase(ArrayList<String> list)
{
try
{
String query = "INSERT INTO mytable(numbers) VALUES(?)";
prepStm = conn.prepareStatement(query);
for (String test : list)
{
prepStm.setString(1, test);
prepStm.addBatch();// add to batch
prepStm.clearParameters();
}
prepStm.executeBatch();
}
}
这是可行的,但插入记录的速度非常慢。 有什么方法可以让我更快地插入记录。
【问题讨论】:
-
你能提供更多细节吗? CSV 大约有多少行。包含?您是否检查过读取文件/写入数据库需要多长时间?
-
现在,用于测试 CSV 文件包含 90k 条记录,插入所有记录大约需要 45 分钟。
-
我的意思是你测试了读取和插入需要多长时间?您可以只插入三个 System.out.println(System.currentTimeMillis())。一个在读取开始之前,一个在读取完成之后,一个在插入到数据库之后完成通过这种方式,您可以确定是否真的是插入数据库(或解析本身)如此缓慢
标签: java mysql prepared-statement sql-insert