【发布时间】:2017-05-03 05:05:37
【问题描述】:
我写了下面的程序来实现这一点:
try {
PreparedStatement statement = connection.prepareStatement(
"SELECT * FROM some_table some_timestamp<?)");
statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
ResultSet resultSet = statement.executeQuery();
CSVWriter csvWriter = new CSVWriter(new FileWriter(activeDirectory + "/archive_data" + timeStamp + ".csv"), ',');
csvWriter.writeAll(resultSet, true);
csvWriter.flush();
} catch (Exception e) {
e.printStackTrace();
}
// delete from table
try {
PreparedStatement statement = connection.prepareStatement(
"DELETE FROM some_table some_timestamp<?)");
statement.setTimestamp(1, new java.sql.Timestamp(dt.getTime()));
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
dbUtil.close(connection);
上述程序在一般情况下可以正常工作,但我想知道如何改进这个程序:
可以流畅地处理一百万条记录,而不会使应用程序服务器过载
考虑到在该程序运行时将有许多记录插入到同一个表中,我如何确保该程序存档然后清除完全相同的记录。
更新:我正在使用 openscv http://opencsv.sourceforge.net/
【问题讨论】:
-
可以添加CSVWriter代码吗?
-
是否合理假设任何新插入的行的时间戳都会大于您用于导出/清除的截止值?如果是这样,那么您问题的这方面就不是问题。
-
@VladislavKysliy,我添加了 opencsv 的源代码。 @ Gord Thomson,我明白你在说什么。时间戳将处理第 2 点。
-
@JackSparrow 我的回答好运吗?
标签: java jdbc resultset large-data