sql = "select * from " + tableNameInDerby;
                rs = stmt.executeQuery(sql);                
                String insertSql = "insert into "+tableName+ " ("+columnNames+") values (" + paraList+ ")";
                psmt = conn.prepareStatement(insertSql);
                while(rs.next()) {
                    if (tableNameInDerby.equalsIgnoreCase("tb_log_info")) {
                        logger.debug("h : " + h++);
                    }
                    for (int k = 1; k <=columnNO; k++) {
                        psmt.setObject(k, rs.getObject(k), rsMeta.getColumnType(k));
                    }
                    psmt.executeUpdate();
                    psmt.clearParameters();
                }
我的rs里面存放了20万条记录,在rs.next()的时候出错了。出错的时候h刚刚打印到1万多。
各位大侠,请帮我看看到底是什么原因。
我还想知道rs.next()的内部机制是什么?? 别人说如果记录比较多的话那么rs = stmt.executeQuery(sql)这句话就会报内存溢出的错误。但是我的程序并不是在这句话中抛的异常,而是循环rs的时候出错了。我想知道rs中是存放所有的记录吗? 还是只存放对记录的一个引用。rs.next()内部是怎么实现的??

解决方案 »

  1.   

    我还想知道rs.next()的内部机制是什么?? 
    游标.
    我想知道rs中是存放所有的记录吗? 还是只存放对记录的一个引用。rs.next()内部是怎么实现的??
    rs本身并没有什么记录.应该只是对首行记录的一个引用
    rs.next();内部就是利用数据库的游标来实现的。next()方法控制游标向下移动.
      

  2.   

    忘了把错误信息发上来了,这个是错误信息:
    com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -964, SQLSTATE: 57011, SQLERRMC: null
      

  3.   

    SQLSTATE 57011: 虚拟存储器或数据库资源不可用。
      

  4.   

    是不是你单个事务太大了,适当的做一下commit吧
      

  5.   

    单个事务太大就会报SQLSTATE 57011这个错误吗???
    可是我不能commit啊,因为不止这一个表,这个表完了之后还有其它的表,如果中间commit的话那下面的表如果出异常就回滚不回去了。