BufferedWriter大量数据写文件速度慢求救

slamdunkning1983 2007-06-25 04:20:23

最近在维护一个比较大型系统的检索模块,这个模块的作用是将检索出来的结果写入csv文件,但是因为客户觉得速度很慢,要求改进,所以就改进了一下sql语句,但是改了之后发现,sql语句的检索速度确实提高了,但是写文件的速度慢了很多,而且验证过结果也是一样的,请问可能是什么原因导致写文件的速度大幅度下降呢?

写文件的代码如下:

Statement stmt = getCon().createStatement();
stmt.setFetchSize(1000);
rs = stmt.executeQuery(sSql);
if(rs != null)
{
while(rs.next())
{
iItiSet = iItiSet + 1;
if(strbuf.length() > 0)
{
strbuf.append("\r\n"); strbuf.append(stringwork.getNullConv(rs.getString("CSV_OUT")));
}else{
strbuf.append(stringwork.getNullConv(rs.getString("CSV_OUT")));
}
if(iItiSet == 10000)
{
bw.write(strbuf + "\r\n"); strbuf.delete(0,strbuf.length());
iItiSet = 0;
}
}
if(strbuf.length() > 0)
{
bw.write(strbuf + "\r\n");
}
}
bw.close();

顺带问一下,
1, 是不是executeQuery执行完了之后,所有的数据就在WEB服务器了,跟DB服务器没有关系了。
2, setFetchSize设的值是在executeQuery执行的时候用还是在rs循环的时候用?
谢谢!
...全文
857 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
slamdunkning1983 2007-06-25
  • 打赏
  • 举报
回复
关于线程的那个部分,可以再具体说一下吗?我的java真的很差……
谢谢!
zqrqq 2007-06-25
  • 打赏
  • 举报
回复
>>>是不是executeQuery执行完了之后,所有的数据就在WEB服务器了,跟DB服务器没有关系了
这个跟driver和rs的设置有关,但是,大多数情况来说,这个时候并没有把数据全部读入WEB服务器。

>>>setFetchSize设的值是在executeQuery执行的时候用还是在rs循环的时候用
在executeQuery执行的时候用

最后,建议你使用多线程来处理大量的读写。对于你的情况,可以一个线程读数据库,一个线程写文件,两个线程用一个linkedList通讯。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧