1可用批量处理方法从速度和效率上都有提高
  Connection conn = Conn.getConn("sms");
        Statement stmt=conn.createStatement();
        conn.setAutoCommit(false);
        String content1[] = content.split("\n");
        for (int i = 0; i < content1.length; i++) {
            String content2[] = content1[i].split("\t");            String name = content2[0];
            String phoneNO = content2[1];
            String classname = content2[2];
            String departmentName = content2[3].trim();
            strSQL = "Insert into STUDENT (ID,NAME,PHONENO,CLASSNAME,DEPARTMENTNAME) Values (SEQ_STUDENT.Nextval,'"
                + name + "'," + phoneNO + ",'" + classname + "','" +
                departmentName + "')";
            stmt.addBatch(strSQL);
        }
        int[] updateCount=stmt.executeBatch();
        conn.commit();
        conn.setAutoCommit(true);
        stmt.close();
        conn.close();

解决方案 »

  1.   

    在取atm编号的时候不能分批地取出吗?
    就是说一次去一部分,然后写到临时表中,依次在来
    这样应该可以的!
      

  2.   

    从[交易表]中取出某一时间段(如一个月)内ATM交易金额,并做相关统计后(其实就是总金额,按ATM编号分组),将数据插入到一[临时表]中。
    其实很简单亚:
    首先,删除临时表中数据,这是必须的第一步
    接着,按照分组条件,将统计出来的数据,直接插入临时表中,就ok了。你何必在程序中实现那?完全可以用sql语句实现亚
    写一个insert语句就可以了,当然,插入的数据,是从其他表查询出来的了
      

  3.   

    如果不用临时表,在数据库中建立一个专门用来存放暂时数据的表可以吗?
    还有感觉while()中嵌套while()这种方式不是很好。
      

  4.   

    我感觉可以有两个方法来解决:
    1.用存储过程来做效率更高的,用纯Sql来实现这个统计功能.这样效率绝对是最高的,因为本身存储过程就是用来处理复杂的数据操作的.而且交给后台数据库,这些处理都是有优化的.
    2.增加JVM的堆内存大小,也可以加快你程序的运行速度的.具体的参数忘了,Sorry.可以查找一下了.
    3.你的程序我没怎么看明白,但是如果只是说一个统计的话,应该用Sql就可以直接得到的呀(可能涉及到Sql的嵌套,in等操作符),不用你用程序在那循环的.当然具体的业务逻辑我不清楚,你在考虑一下,看用一个Sql语句是否可以实现这个功能.总的来说我认为最好的方法就是用后台来实现这个功能是最好的.
      

  5.   

    我说是不是如何优化效率,而是内存不够。上面的第一个while是对所有atm进行遍历,第二个while是对某一台具体的atm做统计(如统计当月累计交易金额)。本来是可以用一个SQL语句做到的,而不用两个while嵌套,但那样系统内存很快耗尽,所以才采用了两个while。写一个存储过程可能会是一样的结果(我没有试过,待会试试),其实就是打开一样很大游标,内存耗尽;所以采用了打开多个小的游标,但内存一样会耗尽。哪位碰到这样的情况?