fireinjava 2010-07-22 14:40
浏览 580
已采纳

大数据量写文件 Java heap space

[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]
请问数据量上百万的,以上代码怎么优化!

广告离我远点 -_#

  • 写回答

2条回答 默认 最新

  • 普通网友 2010-07-30 20:25
    关注

    大致修改了下,如果还是很慢,建议你研究下你的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]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入