[code="java"]
Statement stmt = ds.getConnection().createStatement();
stmt.setFetchSize(2000);
ResultSet rs = stmt.executeQuery(sqlQuery);
pw = new PrintWriter(new FileWriter(fileW, true));
StringBuilder dataStr2 = new StringBuilder("");
int c=0;
for (; rs.next(); pw.print(dataStr2.append("\r\n").toString())) {
dataStr2 = new StringBuilder("");
for (int i = 1; i <= 8; i++)
dataStr2.append(rs.getString(i));
if (c++ % 2000 == 0)
pw.flush();
}
[/code]
请问数据量上百万的,以上代码怎么优化!
广告离我远点 -_#
大致修改了下,如果还是很慢,建议你研究下你的SQL,因为写文件是耗不了多少时间的
[code="java"]Statement stmt = ds.getConnection().createStatement();
stmt.setFetchSize(2000);
ResultSet rs = stmt.executeQuery(sqlQuery);
pw = new PrintWriter(new FileWriter(fileW, true));
StringBuilder dataStr2 = new StringBuilder("");
int c=0;
for (; rs.next(); ) {
dataStr2 = dataStr2.delete(0, dataStr2.length()); // 避免构造大量对象实例
for (int i = 1; i <= 8; i++)
dataStr2.append(rs.getString(i));
if (c++ % 2000 == 0) {
pw.flush();
// 200条数据写一次,没必要没读一条写一次
pw.print(dataStr2.append("\r\n").toString())) ;
}
}[/code]
可以利用生产者消费者模式,声明一个同步的集合,然后一个负责生产,一个负责写入,当然写入的规则可以根据实际情况来实现;这样的话,得需要两个线程,当前的一个线程是生产的,然后另一个线程监控同步集合负责消费。