日期:2014-05-20  浏览次数:20801 次

hibernate分页
public void pagination(HttpServletRequest request){ 
int pageSize=10; 
String currentPageStr=request.getParameter("currentPage"); 
int currentPage=(currentPageStr==null)?0:Integer.parseInt(currentPageStr); 
Session session=HibernateSessionFactory.getSession(); 
Query qy=session.createQuery("from Product"); 
Transaction tran=session.beginTransaction(); 
int count=qy.list().size(); 
int totalPage=(count-1)/pageSize+1; 
qy.setFirstResult((currentPage-1)*pageSize); 
qy.setMaxResults(pageSize); 
List list=qy.list(); 
request.setAttribute("count", String.valueOf(count)); 
request.setAttribute("totalPage", String.valueOf(totalPage)); 
request.setAttribute("currentPage", String.valueOf(currentPage)); 
request.setAttribute("pageSize", String.valueOf(pageSize)); 
request.setAttribute("products", list); 
String bar=setBar(); 
request.setAttribute("bar", bar); 

为什么执行到: 
qy.setFirstResult((currentPage-1)*pageSize); 
qy.setMaxResults(pageSize);就报错,说: 
java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported 
method: ResultSet.absolute应该怎样做才行?

------解决方案--------------------
你看 
int currentPage=(currentPageStr==null)?0:Integer.parseInt(currentPageStr);
你看你自己的这个三元运算符,当为空的时候为0

qy.setFirstResult((currentPage-1)*pageSize);这个时候(currentPage-1)*pageSize 不为负了吗

改成这样,当前页 默认为1
int currentPage=(currentPageStr==null)?1:Integer.parseInt(currentPageStr);

我建议你吧分页信息封装成对象,你这么写条理性太差




------解决方案--------------------
你的jdbc驱动不支持,可能太旧了或者版本不符,或者你数据库补丁包没打到sp4.。。。
------解决方案--------------------
很简单
------解决方案--------------------
不过我记的sql server 没有自带的数据库分页方法,hibernate可以?
------解决方案--------------------
sql驱动还有一个只要一个jar包的。
------解决方案--------------------
antlr.jar包没有考到项目的web-inf/lib
------解决方案--------------------
你抛个异常
------解决方案--------------------
mssqlserver.jar msutil.jar msbase.jar 也有新的和旧的,看看你的包的大小,似乎有个是279k吧

或者你干脆换成最新的驱动包得了,就一个sqljdbc.jar,就完事了