查询数据量大,怎么分几次查 我用java查询数据时,因数据的行数比较多,每次查询都出现Erroring: batchId[44] message[java.lang.OutOfMemoryError: Java heap space]错误。如果我分多次查询的话该怎么实现??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就看你的SQL怎么写了, 或者加大你Java的堆内存.找找-Xms和-Xmx两个参数的用法. 现有A,B两张表:如果A个表中有100W多条记录,怎么通过java来实现把A表的数据放到B表中 大家谁知道把一个有100W记录的表通过java放到另张表里需要多长时间???有没有高效的查询方法,或在java里动些手脚,总之需要的时间短就可以了 什么数据库?大型数据库都支持存储过程。你用JAVA调用数据库的存储过程。这样,Java前端就不会有数据压力了。 现有A,B两张表: 如果A个表中有100W多条记录,怎么通过java来实现把A表的数据放到B表中100万的话,大致3分钟吧!我给你些提示1 读取和写入用2个Connection2 写入启用Batch Insert 批量写入,每2000行提交一次3 如果你对线程熟悉,读写过程可以做成多线程,但数据来源和写入操作做成独立的。也就是货物来源和货物存放地是分别一个,搬运工很多。批量写入速度很快,大致比每一个提交一次快20倍以上吧! 主要是一个 addBatch()方法,和 executeBatch() 提交; 如果你是Oracle的话,我这里有OracleCopy 整套应用,我自己写的,用了2年了,用来复制2个Oracle的数据的多张表。 对了,提示你, message[java.lang.OutOfMemoryError: 不要想着把数据都读出来再进行操作, 独一行,那面写一行。 启动批量提交,速度很快的。10个线程比单线程也就快2-4倍吧! 呵呵!请看一下数据库的模式方面的知识,一个结果集是已经生成的,保存在某个单独的空间,在一个事务里面是不会随着你的读取而动态变化。而且,就算最糟糕的情况,你可以锁定目前的数据,不影响新数据插入的,也就是在read_duty 模式下也能正常读取。 你说的是查询出所有结果集分批提交吗?还是下面的步骤1.查询1~1000条数据select top 1000 * from table2.addBatch3.executeBatch4.查询1000~2000条数据select top 1000 * from table where id not in (select top 2000 id from table)5.addBatch6.executeBatch......... 你根本没明白我说的select * from tablewhilr(rs.next){ // read // addBath() if(){ executeBatch(); }}Over;占用2个Connection, 一个读,一个写。不要在一个Connection里面做。 你把 insert的部分全部屏蔽,专心读取,看看是否是读取部分造成的游标问题如果能运行,那就是 insert部分的pstat 和 rs 你没有关闭否则, 读取部分有没有关闭的rs, 其实读取只需要一个rs就可以了! 直接在java里写 insert into tablename select column_name from tablename100多W数据 几秒就搞定了 5行代码求解释 Java 字符串替换 Think In Java 4(完美高清中文版) 请问poi有函数能把excel xp格式的文件转换为2007吗? java jnative问题 filewriter输出时的一个问题 IDE与classpath的区别 菜鸟求助!!! 怎么清除JTable中的全部内容?? 去年过得真惨,尤其是过年,郁闷,有难兄难弟、难姐难妹吗?领安慰分吧…… 如何将html代码设为变量 java的GUI问题?
如果A个表中有100W多条记录,怎么通过java来实现把A表的数据放到B表中
如果A个表中有100W多条记录,怎么通过java来实现把A表的数据放到B表中
100万的话,大致3分钟吧!我给你些提示
1 读取和写入用2个Connection
2 写入启用Batch Insert 批量写入,每2000行提交一次
3 如果你对线程熟悉,读写过程可以做成多线程,但数据来源和写入操作做成独立的。也就是货物来源和货物存放地是分别一个,搬运工很多。批量写入速度很快,大致比每一个提交一次快20倍以上吧!
一个结果集是已经生成的,保存在某个单独的空间,在一个事务里面是不会随着你的读取而动态变化。
而且,就算最糟糕的情况,你可以锁定目前的数据,不影响新数据插入的,也就是在read_duty 模式下也能正常读取。
1.查询1~1000条数据select top 1000 * from table
2.addBatch
3.executeBatch
4.查询1000~2000条数据select top 1000 * from table where id not in (select top 2000 id from table)
5.addBatch
6.executeBatch
.........
// read
// addBath()
if(){
executeBatch();
}
}
Over;占用2个Connection, 一个读,一个写。不要在一个Connection里面做。
100多W数据 几秒就搞定了