浏览 2419 次
|
锁定老贴子 主题:实现分页时一个session的问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-07-29
public class Page {
/*页面大小*/ private int pageSize=2; /*开始页*/ private int beginStartPage=1; /*记录总数*/ private long recordCount=0; /*页数*/ private int pageCount=0; /*结果对象*/ private Iterator result; public Page() { } /** * @return */ public int getBeginStartPage() { return beginStartPage; } /** * @return */ public int getPageSize() { return pageSize; } /** * @return */ public long getRecordCount() { return recordCount; } /** * @return */ public Iterator getResult() { return result; } /** * @param i */ public void setBeginStartPage(int i) { beginStartPage = i; } /** * @param i */ public void setPageSize(int i) { pageSize = i; } /** * @param l */ public void setRecordCount(long l) { recordCount = l; } /** * @param iterator */ public void setResult(Iterator iterator) { result = iterator; } /** * 根据记录总数得到页数 * @param rscount */ public void setPageCountByRS(){ int the_yu = (int) (this.recordCount % this.pageSize); if(the_yu==0){ setPageCount((int) (this.recordCount/this.pageSize)); }else{ setPageCount((int)((this.recordCount-the_yu)/this.pageSize+1)); } } /** * @return */ public int getPageCount() { return pageCount; } /** * @param i */ public void setPageCount(int i) { pageCount = i; } } public static Page listByAll(Page page)throws Exception{ Session session = Init.sessions.openSession(); Transaction tx = null; Iterator itr = null; String queryString = "select u.userno,u.username,u.authority,d.deptname " + "from Users as u,Dept as d where u.deptno=d.deptno"; try { tx = session.beginTransaction(); Query query = session.createQuery(queryString); if(page.getRecordCount()<=0){ String countRS="select count(*) from Users"; page.setPageSize(2); page.setRecordCount(((Integer) session.iterate(countRS).next()).intValue());//得到总记录数 page.setPageCountByRS();//根据记录总数和页大小得到可以分多少页 } query.setFirstResult((page.getBeginStartPage()-1)*page.getPageSize()); query.setMaxResults(page.getPageSize()); itr = query.iterate(); page.setResult(itr); session.flush(); tx.commit(); return page; }catch (Exception e){ tx.rollback(); e.printStackTrace(); System.out.println("error in listByAll"); return null; }finally { session.close();//如果把这个关闭注释掉一切就正常?为什么啊 } } public static void main(String args[]) throws Exception { UsersBean ub = new UsersBean(); Page p = new Page(); Page pg = ub.listByAll(p); System.out.print("共"+pg.getPageCount()+"页 "); System.out.println("第"+pg.getBeginStartPage()+"页"); Iterator it = pg.getResult(); while (it.hasNext()){// Object[] u = (Object[])it.next();//在这里出错啊 String userno =(String)u[0]; String username =(String)u[1]; String authority =(String)u[2]; String deptname =(String)u[3]; System.out.println(userno+" "+username+" "+" "+authority+" "+deptname); } } [ERROR] IteratorImpl - -could not get next result <java.sql.SQLException: 关闭的 Resultset: next>java.sql.SQLException: 关闭的 Resultset: next at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1130) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196) at net.sf.hibernate.impl.IteratorImpl.postNext(IteratorImpl.java:63) at net.sf.hibernate.impl.IteratorImpl.next(IteratorImpl.java:91) at system.UsersBean.main(UsersBean.java:166) net.sf.hibernate.LazyInitializationException: Hibernate lazy instantiation problem at net.sf.hibernate.impl.IteratorImpl.next(IteratorImpl.java:97) at system.UsersBean.main(UsersBean.java:166) Caused by: java.sql.SQLException: 关闭的 Resultset: next at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134) at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179) at oracle.jdbc.dbaccess.DBError.check_error(DBError.java:1130) at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:196) at net.sf.hibernate.impl.IteratorImpl.postNext(IteratorImpl.java:63) at net.sf.hibernate.impl.IteratorImpl.next(IteratorImpl.java:91) ... 1 more Exception in thread "main" 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-07-29
谢谢楼上,就是这个了,呵呵!
|
|
| 返回顶楼 | |
|
最后更新时间:2004-07-30
我就是有一点疑问:查询干吗还开Transaction?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-07-30
引用 我就是有一点疑问:查询干吗还开Transaction?
数据库除了写一致性,还有读一致性问题!你需要选择你的游标策略,例如你是否允许在你iterator的过程其他人删除其中的纪录呢? 当然我也没有仔细想这个问题,还望更多的人发表意见! |
|
| 返回顶楼 | |
|
最后更新时间:2004-08-02
好东西。收藏了。。。谢谢楼主
|
|
| 返回顶楼 | |






