先贴 源码:
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语句 怎么写啊?着急 ,高人 来啊 我菜鸟 第一次做公司的项目!

解决方案 »

  1.   

    还有就是 配置文件里面,需要用到access方言包,但是网上下载的access.zip和hibnate是收费的不能用,网上说用sysbase的,org.hibernate.dialect.SybaseDialect,但是这个包的下载地址在那里啊?我现在用到是oracle10g的方言包。只能查询,增删改都报错。。
      

  2.   

    hql·········  select top 10 * from Waiyuzhengshu 
      

  3.   

    总算有人来,,, 数据有1000多条,现在 我用  from Waiyuzhengshu 
    半天才查询出来,,,就是不知道  select top 10 * from Waiyuzhengshu  语句为什么不能执行
      

  4.   

    怎么用那?调用哪个方法,hib自带的 ,不知道怎么用
      

  5.   

    要么用这两个分页
    setFirstResult();
    setMaxResults();要么直接执行sql语句,不用hql语句。
      

  6.   

    你top 10和top 20不是参数么?你意思是要查询20~30的数据嘛?
    改成
    setFirstResult(20);//从20开始
    setMaxResults(10);//取10条
      

  7.   

    一个方法就行了,你页面会传入一个page进来,也就是第几页。
    如果你每页显示10条,根据你传入的page。
    可以这样写:setFirstResult((page-1)*10+1);//从什么位置开始
    setMaxResults(10);//取10条
      

  8.   

    setFirstResult((page-1)*10+1);//从什么位置开始
    setMaxResults(10);//取10条他在dao层的方法应该是:
    public List<Fan> lists(String sql,int page){
         ...
    }
    这个 方法 在action层 是怎么 调用的,是通过PageBean pageBean = new PageBean(LINE, currentPage, "???",list);在“???”调用的吗?
      

  9.   

    我用分页不是把页号作为数据记录的一项,是把数据取出来然后根据每页显示的条数计算出来有多少页,我的方法参考下吧,不知道是不是你想要的结果:
    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"/>记录&nbsp;&nbsp;
            第<s:property value="pageNow"/>页&nbsp;&nbsp;
             <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;
        }
    }
      

  10.   

    顶下 楼上的,这个应该是 刚开始学习和sqlserver数据库连接,所用的查询方法,很 不错了对刚开始接触的人,如果数据量少的话,应该没什么问题,特别是
    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() ;
            }
    刚开始我以为是查询所有的数据,最后发现是查询的id总个数,这样应该不会造成数据库太多是查询时间,问下楼上,如果数据过多,执行效率怎么样?我还没试