急!高分相送!OutofMemoryError

ghostsz 2003-08-26 10:45:40
用jdbc连接,分页显示,游标技术,当数据量很大时,报错。java.lang.OutofMemoryError
数据库为:Sybase 12.0

st = con.createStatement(...);
rs = st.executeQuery(sSql);
rs.absolute(i);--------到这报错

...全文
28 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostsz 2003-08-26
  • 打赏
  • 举报
回复
哦,你的方法很好,但sybase 没有rownum这个东东,我正在找.
ejbcreate 2003-08-26
  • 打赏
  • 举报
回复
我建议你不要一下子把所有符合条件的记录选出来,我的意思是说:你从jsp里传几个参数,
<a href="a.jsp?NextPage=2&RowsPage=10">下一页</a>
//其中NextPage:下一页的页码;RowsPage:每页显示的记录数;
1) 这样你可以先计算出符合条件的记录数目:
String lCountSql = "select count(*) as rowcount from ("+sSql+")";
rs = st.executeQuery(lCountSql);
int iCounts = 0;
if(rs.next())
iCounts = rs.getInt("rowcount");
2)获得你传过来的参数,并做处理:
int nRowPage = request.getParameter("RowsPage")==null?0:Integer.parseInt(request.getParameter("RowsPage"));
int nPage = request.getParameter("NextPage")==null?0:Integer.parseInt(request.getParameter("NextPage"));
if(nRowPage<1) nRowPage=10;
int nPages = (iCount-1)/nRowPage+1;
if (nPages<1) nPages=1;
if (nPage>nPages) nPage=nPages;
if (nPage<1) nPage=1;

3)进一步处理,
int nStartRow = 0;
int nEndRow = nRowPage;
if(nPage>1){
nStartRow = (nPage-1)*nRowPage+1;
nEndRow = nPage*nRowPage;
}
String sSql_1 = "select a.* from (select b.*,rownum rn from("+sSql+") b where rownum <= "+nEndRow+") a where rn >= "+nStartRow;
4)取得你想要的数据:
rs = st.executeQuery(sSql_1);
while(rs.next())
{
//
}

PS:你原来的SQL语句得按一定顺序排序,所选的数据才会正确。
希望对你有所帮助。
ghostsz 2003-08-26
  • 打赏
  • 举报
回复
分次读数据,怎么读?
数据量是很大
cainiao_2000 2003-08-26
  • 打赏
  • 举报
回复
分次读数据,不要一次读完!
dmhorse 2003-08-26
  • 打赏
  • 举报
回复
select时选少一点就是了,你一次不会取几十万条记录吧
gisgeoboy 2003-08-26
  • 打赏
  • 举报
回复
在rs.absolute(i);后面加一句rs.previous();
zhwquan 2003-08-26
  • 打赏
  • 举报
回复
用别的方法分页了。
dmhorse 2003-08-26
  • 打赏
  • 举报
回复
select时选少一点就是了,你一次不会取几十万条记录吧

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧