首先,我遇到的问题是java连接数据库超内存。
之后就利用分页进行查询
public List findAllByPage(int FirstResult,int MaxResults) {
log.debug("finding all Statuse instances");
try {
String queryString = "from Statuse";
Query queryObject = getSession().createQuery(queryString);
queryObject.setFirstResult(FirstResult);
queryObject.setMaxResults(MaxResults);
return queryObject.list();
} catch (RuntimeException re) {
log.error("find all failed", re);
throw re;
}
}
但是,还是会超内存。
百度了一下,java明明有内存释放机制啊,不能理解。强制使用system.gc()释放内存,还是不行。出错代码
int page = 5000,i=0;
List<Statuse> ls = null;
for (; true; i++) {
ls = sdao.findAllByPage(page * i, page);
System.out.println(i + " " + ls.size());
if (ls.size() == 0)
break;
}
后来才发现,是hibernate建立的连接需要手动关闭。关闭之后内存就正常了。
List<Statuse> ls = null;
for (; true; i++) {
ls = sdao.findAllByPage(page * i, page);
System.out.println(i + " " + ls.size());
if (ls.size() == 0)
break;
sdao.getSession().close();
}