查询出数据,数据量有几十万条。要作一下处理,取出每条记录的ID,NAME,TYPE1,TYPE2,TYPE3,拼成字符串。
存储到数据库中,后期再根据数据库里的内容生成文件。  这段代码的处理速度非常慢。String s = "";
for (int i = 0; i < list.size(); i++) {
 Map map = (Map) list.get(i);
         s+=map.get("ID").toString()+map.get("NAME").toString()+map.get("TYPE1").toString()+map.get("TYPE2).toString()+map.get("TYPE3").toString()+ "\r\n";

现在想的方法是String换成 StringBuffer,其它还有别的处理方式吗?可以加快速度的?一方面是数据量太大,另外这种处理是不是不应该放到页面进行操作?因为很慢,对用户来说感觉非常不好。

解决方案 »

  1.   

    一个关键思想是批量处理
    1. 查询数据库的时候使用分页
    2. 使用StringBuilder
    3. 写入数据库也是批量写入
    4. 生成文件时,如果不能使用数据库自己的功能,也可以先批量查询出来,写入文件时设置缓存大些。
      

  2.   

    为什么不用SQL在数据库层就直接解决了呢,非要取到前台来拼接,然后再存到数据库去
    完全可以一次访问数据库,搞定你的数据
      

  3.   


    用这种方式吗?select ID||'   '||NAME||'   '||TYPE1||'   '||TYPE2||'   '||TYPE3  as content   .但是大数据量时,这种查询出来也非常慢。查询出来数据也要遍历,将content 再拼接起来。只是少了content 内部字段拼接的程序。在数据库层解决是指的是?可以直接在ORACLE SQL语句中进行遍历每条记录的content再拼接起来?
      

  4.   

    在SQL语句中使用wmsys.wm_concat拼接列,但是速度也很慢啊。主要是数据量大。另外由于wmsys.wm_concat有数据条数限制,又重新定义了方法。
      

  5.   

    直接insert嵌套select不行吗,不需要遍历吧
      

  6.   


    但是数据是这样的形式:
    ID NAME TYPE1 TYPE2 TYPE3
    1  MARY  T1    T2    T3
    2  TOM   T11   T22   T33
    3  JERRY T12   T13   T14
    ......最后拼接成这样的形式,放到数据库的一个字段里:
    1  MARY  T1    T2    T3
    2  TOM   T11   T22   T33
    3  JERRY T12   T13   T14insert嵌套select可以理解,但多条记录的拼接怎么用SQL实现?
      

  7.   

    多行记录还要拼在一起的话,只能够用PL SQL了,楼上的方式可以实现,用存储过程吧