用ssh和access数据库连接分页报错
先贴 源码:
action:
public String list(){
List<Waiyuzhengshu> list=waiyuService.list(waiyu);
getRequest().setAttribute("list", list);
// 分页处理
String currentPage = (String) getRequest().getParameter("page");
if (null == currentPage || "".equals(currentPage)) {
currentPage = "1";
}
final int pageSize = 10;
PageBean pageBean = new PageBean(pageSize, currentPage,"listInfomation.action?where1=1", list);
PageResult result = pageBean.doExecute();
getRequest().setAttribute("page", result.getPageStr());
getRequest().setAttribute("resultList", result.getResultList());
return "success";
}
用到的pageBean 和PageResult:PageBean
public String list(){
List<Waiyuzhengshu> list=waiyuService.list(waiyu);
getRequest().setAttribute("list", list);
// 分页处理
String currentPage = (String) getRequest().getParameter("page");
if (null == currentPage || "".equals(currentPage)) {
currentPage = "1";
}
final int pageSize = 10;
PageBean pageBean = new PageBean(pageSize, currentPage,"listInfomation.action?where1=1", list);
PageResult result = pageBean.doExecute();
getRequest().setAttribute("page", result.getPageStr());
getRequest().setAttribute("resultList", result.getResultList());
return "success";
}
PageResult:public class PageResult {
private String pageStr;
private String pageInfoStr;
private List resultList = new ArrayList();
//set get方法
。。。。
}
dao层:package com.dao.ImplDAO;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.bean.Waiyuzhengshu;
import com.dao.WaiyuzhengshuDAO;
public class WaiyuzhengshuImplDAO extends HibernateDaoSupport implements WaiyuzhengshuDAO {
/*显示 所有 用户信息
* (non-Javadoc)
* @see com.dao.WaiyuzhengshuDAO#list()
*/
@Override
public List<Waiyuzhengshu> list(Waiyuzhengshu waiyu) {
// TODO Auto-generated method stub
/*StringBuffer sb = new StringBuffer();
sb.append("FROM Waiyuzhengshu");*/
String hql="select top 10 * from Waiyuzhengshu where(ID not in(select top 20 ID from " +
"Waiyuzhengshu ))";
return this.getHibernateTemplate().find(hql);
}
}
现在的问题是:运行时候 提示 sql语句 错误, line 1:12: unexpected token: 10
line 1:12: unexpected token: 10
at org.hibernate.hql.antlr.HqlBaseParser.identPrimary(HqlBaseParser.java:4037)
at org.hibernate.hql.antlr.HqlBaseParser.primaryExpression(HqlBaseParser.java:861)
at org.hibernate.hql.antlr.HqlBaseParser.atom(HqlBaseParser.java:3438)
at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3216)
at org.hibernate.hql.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3098)
at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2818)
at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:570)
at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2586)
at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2449)
at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.j
line 1:18: unexpected token: from
at org.hibernate.hql.antlr.HqlBaseParser.unaryExpression(HqlBaseParser.java:3223)
at org.hibernate.hql.antlr.HqlBaseParser.multiplyExpression(HqlBaseParser.java:3128)
at org.hibernate.hql.antlr.HqlBaseParser.additiveExpression(HqlBaseParser.java:2818)
at org.hibernate.hql.antlr.HqlBaseParser.concatenation(HqlBaseParser.java:570)
at org.hibernate.hql.antlr.HqlBaseParser.relationalExpression(HqlBaseParser.java:2586)
at org.hibernate.hql.antlr.HqlBaseParser.equalityExpression(HqlBaseParser.java:2449)
at org.hibernate.hql.antlr.HqlBaseParser.negatedExpression(HqlBaseParser.java:2413)
at org.hibernate.hql.antlr.HqlBaseParser.logicalAndExpression(HqlBaseParser.java:2331)
想 问下 在dao层 sql语句 怎么写啊?着急 ,高人 来啊 我菜鸟 第一次做公司的项目!
[解决办法]
hibernate不支持top语句。
[解决办法]
要么用这两个分页
setFirstResult();
setMaxResults();
要么直接执行sql语句,不用hql语句。
[解决办法]
一个方法就行了,你页面会传入一个page进来,也就是第几页。
如果你每页显示10条,根据你传入的page。
可以这样写:
setFirstResult((page-1)*10+1);//从什么位置开始
setMaxResults(10);//取10条
[解决办法]
我用分页不是把页号作为数据记录的一项,是把数据取出来然后根据每页显示的条数计算出来有多少页,我的方法参考下吧,不知道是不是你想要的结果:Java codeListAction.javapackage com.sy.action;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.sy.dao.AdminDao;import com.sy.dao.NewsDao;import com.sy.dao.impl.AdminDaoImpl;import com.sy.dao.impl.NewsDaoImpl;import com.sy.vo.Admin;import com.sy.vo.News;public class ListAction extends ActionSupport { private static final long serialVersionUID = 1L; int i=1;//中间变量 private int k;//储存最大页面数 private int pageNow=1; //页码数,初始为1 private int pageSize = 5 ; //页面行数 private int intRowCount;//总行数 private int intPageCount;//总页数 private Admin admin; private List<Admin> Adminss; private News news; @SuppressWarnings("unchecked") private List<News> Newss; private int id; private int aid; public News getNews() { return news; } public void setNews(News news) { this.news = news; } @SuppressWarnings("unchecked") public List<News> getNewss() { return Newss; } public void setNewss(List<News> newss) { Newss = newss; } public int getId() { return id; } public void setId(int id) { this.id = id; } public Admin getAdmin() { return admin; } public void setAdmin(Admin admin) { this.admin = admin; } public List<Admin> getAdminss() { return Adminss; } public void setAdminss(List<Admin> adminss) { Adminss = adminss; } public int getAid() { return aid; } public void setAid(int aid) { this.aid = aid; } public int getPageNow() { return pageNow; } public void setPageNow(int pageNow) { this.pageNow = pageNow; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getIntRowCount() { return intRowCount; } public void setIntRowCount(int intRowCount) { this.intRowCount = intRowCount; } public int getIntPageCount() { return intPageCount; } public void setIntPageCount(int intPageCount) { this.intPageCount = intPageCount; } public int getK() { return k; } public void setK(int k) { this.k = k; }@SuppressWarnings("unchecked") @Override//显示新闻列表 public String execute() throws Exception { NewsDao npage=new NewsDaoImpl(); intRowCount=npage.count(); k=(intRowCount + pageSize - 1) / pageSize; intPageCount = (intRowCount + pageSize - 1) / pageSize;//计算出总页数 if(pageNow<1){ pageNow=1; } if(pageNow > intPageCount) pageNow=intPageCount; i = (pageNow -1)*pageSize; NewsDao nlist=new NewsDaoImpl(); if(null!=nlist.queryByPage(i,pageSize)){ Newss = nlist.queryByPage(i,pageSize); return SUCCESS; }else{ return "failure"; } } ..}listNews.jsp<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags"%><% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> </head> <body>.. <center> 共<s:property value="intRowCount"/>记录 第<s:property value="pageNow"/>页 <s:url id="url_pre" value="list.action"> <s:param name="pageNow" value="pageNow-1"></s:param> </s:url> <s:url id="url_next" value="list.action"> <s:param name="pageNow" value="pageNow+1"></s:param> </s:url> <s:iterator value="Newss" status="status"> <s:url id="url" value="list.action"> <s:param name="pageNow" value="pageNow"/> </s:url> </s:iterator> <s:if test="pageNow==1"> <s:a href="%{url_pre}">最前一页</s:a> </s:if> <s:else> <s:a href="%{url_pre}">上一页</s:a> </s:else> <s:if test="pageNow==k"> <s:a href="%{url_next}">最后一页</s:a> </s:if> <s:else> <s:a href="%{url_next}">下一页</s:a> </s:else> </center> </body></html>NewsDao.javapackage com.sy.dao.impl;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.List;import com.sy.dao.NewsDao;import com.sy.util.DataBaseConnection;import com.sy.util.StringUtil;import com.sy.vo.News;public class NewsDaoImpl implements NewsDao { //获取分页新闻列表 @SuppressWarnings("unchecked") public List<News> queryByPage(int i,int pageSize){ List<News> newss=new ArrayList(); PreparedStatement pstmt = null ; String sql = null ; ResultSet rs = null ; DataBaseConnection dbc = null ; dbc = new DataBaseConnection() ; sql = "select * from struts2new order by id asc limit " + i + "," + pageSize; try { pstmt = dbc.getConnection().prepareStatement(sql); rs = pstmt.executeQuery() ; while(rs.next()) { News news=new News(); news.setId(rs.getInt("id")); news.setName(rs.getString("name")); news.setTitle(rs.getString("title")); news.setDate(rs.getString("date")); news.setEmail(rs.getString("email")); news.setContent(rs.getString("content")); i++; newss.add(news); } rs.close() ; pstmt.close() ; } catch(Exception e) { System.out.println(e) ; } finally { dbc.close(); } return newss; } //查询总行数 public int count() { int intRowCount = 0;//总行数 PreparedStatement pstmt = null ; String sql = null ; ResultSet rs = null ; DataBaseConnection dbc = null ; dbc = new DataBaseConnection() ; sql = "select count(id) from struts2new order by id asc"; try { pstmt = dbc.getConnection().prepareStatement(sql); rs = pstmt.executeQuery(); rs.next();//游标指向第一行 intRowCount=rs.getInt(1);//取得总行数 rs.close() ; pstmt.close() ; } catch(Exception e) { System.out.println(e) ; } finally { dbc.close(); } return intRowCount; }}