读取大量数据时数据时内存溢出,怎样分批读取?
在写一个程序更新某数据内某条内容时,(用的数据库是sql2000)发生java.lang.OutOfMemoryError: Java heap space错误,具体代码如下:
public void Update(Hashtable inputData, Hashtable outputData,
HttpSession mySession){
Bean find=new Bean();//封装了连接数据库等操作
String str="select id,content,name from Plan";
String content;
String oldname;//存放表中原来的名字
String newname;//存放新的名字
APlan tp=new APlan();
ResultSet rs;
int fail=0;
try{
find.setstatement(str);//设置查询语句
rs=find.getResult();//得到返回的结果集
while(rs.next()){
content=rs.getString("content");//获得表中某一的数据,然后匹配出新的名字
oldname=rs.getString("name");//获得旧的名字
newname=tp.MatchSortname(content);//匹配出新的名字
if(!oldsortname.equals(newsortname)){//如果旧的名字与新名字不相等,进行更新
str="update Plan set name='"+newname+"' where id='"+rs.getString("id")+"'";
find.setQuerystatement(str);//设置更新语句
find.updataRecord();//更新
if(find.isRollbackboon())//检查是否更新成功
fail++;
}
}
}catch(Exception e){
e.printStackTrace();
}
当运行这段代码是,刚开始的几十条数据是可以更新的,但是,当数据量达到一定程度的时候,就会发生java.lang.OutOfMemoryError: Java heap space
我个人认识这是这段代码所花费的内存太多了,愿意可能在于数据量太多或者匹配新名字的时候占用太多数据,我暂时没有想到新的匹配算法,想在拿出数据时改进,请问各位能否分配读出Plan表中的数据,然后再分配更新,这样会不会有效果?有效果该怎么分配读出?又或者有什么其他方法解决这个问题(PS:尽量不要用增加heap space的方法)谢谢各位大神。