请问在jsp中怎样可以获得数据库里前5项的数据,并在页面的表格上分行地显示出来(把获得显示出来的数据可以超链接的更好)!!!~~谢谢~~!!

解决方案 »

  1.   

    你这是最基本的数据库查询和jsp显示呀。
      

  2.   

    select top 5 * from 表名 
      

  3.   

    分页你可以在网上搜出一大堆。大概说下思路。分页一般交给数据库来处理,在分页的时候,你首先要查询一下看数据库到底有多少条记录--总记录数,然后再根据你设定的每页显示多少条记录--每页记录苏,计算一下应该分多少页,把这些都分好了后,你就可以传一个参数--当前页数,来确定应该查询出哪几条数据了。
    超链接的话把数据包含在<a></a>里面就行了
      

  4.   

    兄弟就用最基本的jdbc了!用connection 连接用preparedStatement 操作用ResultSet 村结果!输出就可以了!!分页可以可以地址重写比如<a href="showdatebase.jsp?page=一个参数"></a>
      

  5.   

    oracle:select * from table where rownum < 5;
    mysql:select * from table limit 0,5;
    结果放list里面 在页面循环输出就好了
      

  6.   


    public class PageBean
    {
    private int pageCount=5;//每页记录数
    private int totalPage=0;//总页数
    private int totalCount=0;//总记录数
    private int currentPage=1;//当前页码
    private boolean hasPrevious=false;//有没有上一页
    private boolean hasNext=false;//有没有下一页
    private int startPage=1;//起始页
    private int endPage=1;//结束页
    private int viewPageCount=8;//每页显示几个公页,类GOOGLE

    private List list=null;//被分页的LIST
    //初始化分页Bean
    public void init(List list,int pageCount,int viewPageCount,int cupage)
    {
    //初始化参数
    this.list=list;
    this.pageCount=pageCount;
    this.currentPage=cupage;
    this.viewPageCount=viewPageCount;
    //计算总记录数
    totalCount=list.size();
    //计算总页数
    totalPage=(totalCount+pageCount-1)/pageCount;
    //检验当前页是否越界
    if(currentPage<1)
    currentPage=1;
    if(currentPage>totalPage)
    currentPage=totalPage;
    //初始化起始页和终止页
    this.setStartPage();
    this.setEndPage();
    //检验是否有上一页,下一页
    if(currentPage+1<totalPage)hasNext=true;
    if(currentPage-1>1)hasPrevious=true;
    }
    //的到当前页的LIST
    public List getCurrentPage()
    {

    List list=new ArrayList();
    //计算起始记录和终止记录
    int start=(currentPage-1)*pageCount;
    int endrs=start+pageCount-1;
    if(endrs>=totalCount)endrs=totalCount-1;
    int count=0;
    //降序填加list元素
    for(int i=endrs;i>=start;i--)
    {
           list.add(count++,this.list.get(i));
      // Collections.reverse(list);
      if(count>pageCount)break;
    }
    return list;
    /*
          int start=(currentPage-1)*pageCount;
    int count=1;
    for(int i=start;i<this.list.size();i++)
    {
       list.add(this.list.get(i));  
       if(count++>pageCount-1)break;
    }
    return list;*/
    }
    /*
    public List getCurrentPage(int page)
    {
    if(page<1)
    page=1;
    if(page>totalPage)
    page=totalPage;
    List list=new ArrayList();
    int start=(page-1)*pageCount;
    int count=1;
    for(int i=start;i<this.list.size();i++)
    {
       list.add(this.list.get(i));  
       if(count++>pageCount-1)break;
    }
    return list;
    }
    //取上一页LIST
    public List getPrevious()
    {
    if(hasPrevious)
    {
    currentPage=currentPage-1;
    }
    if(currentPage>1)
    {
    hasNext=true;
    hasPrevious=true;
    }else
    {
    hasNext=true;
    hasPrevious=false;
    }
           return this.getCurrentPage();
       
    }*/
    //取下一页LIST
    /* public List getNext()
    {
    if(hasNext)
    {
    currentPage=currentPage+1;
    }
    if(currentPage<totalPage)
    {
    hasNext=true;
    hasPrevious=true;
    }else
    {
    hasNext=false;
    hasPrevious=true;
    }
    return this.getCurrentPage();
    }*/
       // 设置始页面
    public void setStartPage()
    {

    if(currentPage-viewPageCount/2<=0)
    {
    this.startPage=1;
    }else
    {
       this.startPage=currentPage-viewPageCount/2;
    }

    }
    //设置终止页
    public void setEndPage()
    {  if(totalPage<=currentPage+viewPageCount/2)
        {
    this.endPage=this.totalPage;
        }else
        {
          this.endPage=currentPage+viewPageCount/2;
        }

    }
    //的到是否有下页
    public boolean isHasNext()
    {
    return hasNext;
    }
    //的到是否有上一页
    public boolean isHasPrevious()
    {
    return hasPrevious;
    }
    //的到终止页
    public int getEndPage()
    {
    return endPage;
    }
    //的到起始页
    public int getStartPage()
    {
    return startPage;
    }
    //的到当前页
    public int getPageCount()
    {
    return pageCount;
    }
    //的到总记录数
    public int getTotalCount()
    {
    return totalCount;
    }
    //的到总页数
    public int getTotalPage()
    {
    return totalPage;
    }
    //的到显示页数如:1 2 3 4 5 6 
    public int getViewPageCount()
    {
    return viewPageCount;
    }
    }
      

  7.   

          
    在公共类中写
           /**
     *  通用的分页查询方法
     */
    public List searchPage(String hql,Object[] values , int page , int count) {
    Session session=super.getSession();
    Query query=session.createQuery(hql);
    if(values!=null){
    for (int i = 0; i < values.length; i++) {
    query.setParameter(i, values[i]);
    }
    }
    //设置从第几条数据开始
    query.setFirstResult((page-1)*count); //共返回多少条数据
    query.setMaxResults(count); return query.list();
    }
    public int total(String hql,Object[] values)
    { try
    {
    Session session=super.getSession();
    Query query=session.createQuery(hql);
    if(values!=null){
    for (int i = 0; i < values.length; i++) 
    {
    query.setParameter(i, values[i]);
    }
    }
    return Integer.parseInt(query.uniqueResult().toString());
    }
    catch (Exception e) 
    {
    e.printStackTrace();

    return 0;
    }在Servlet中//每页显示多少条
    int pageNo=5;
    //总条数
    int count=0;
    if(request.getParameter("count")==null)
    {
    count=service.selectcount(startdate, enddate, sellNum, Integer.parseInt(selnetName.trim()));
    }else
    {
    count=Integer.parseInt(request.getParameter("count"));   
    }
    //总页数
    int num=0;
    //当前页数
    int page=0;     if(request.getParameter("page") == null)
    {
    page= 1;  
    }
    else{     
    page= Integer.parseInt(request.getParameter("page"));     
    }   
    if(page<1)
    {
    page=1;
    }
    if(count!=0){
    if(count%pageNo==0){
    num=count/pageNo;
    }
    else{
    num=count/pageNo+1;
    }
    }
    if(page>=num)
    {
    page=num;
    }
    List list= null; if(num!=0) {
    list=service.queryPage(startdate,enddate,sellNum,Integer.parseInt(selnetName.trim()), page, pageNo);
    } if (list==null)
    {
    request.setAttribute("v", "对不起没有你要找的信息");
    } request.setAttribute("SellForm", list);
    request.setAttribute("page", page);
    request.setAttribute("num", num);
    request.setAttribute("count", count);
    在页面用这些存的值去取就可以了
      

  8.   

    对于这个问题不会求到可用的答案及代码的,建议楼主好好看一下2个方面:
    一是sql语法,二是分页的实现方法
      

  9.   

    用SQL语句控制就可以了 select top 5 * from 表名
      

  10.   

    select top 5 * from 表名    还可以排序一下
      

  11.   

    用SQL语句控制就可以了 select top 5 * from 表名
    用Mysql语句控制:select * from 表名 limit 5;
      

  12.   

    一、<%
    mystr=application.getRealPath("database/winnetdata.mdb");
    mydata.setrealpath(mystr);
    mydata.setSqlstr("select id,news_title from winet_news order by id desc");
    mydata.initial();
    sqlRst=mydata.exeQuery();
    while(sqlRst.next() && i<4){
    tempstr=sqlRst.getString(2);
    if(tempstr.length()>30) tempstr=tempstr.substring(0,29)+"...";
    out.print("<tr><td>·<a href=newshow.jsp?newsID="+sqlRst.getString(1)+" target=_blank>"+tempstr+"</a></td></tr>");
    i++;
    }
    i=0;
    sqlRst.close();
    mydata.Closedb();%>
    二、用SQL语句控制就可以了 select top 5 * from 表名 
    用Mysql语句控制:select * from 表名 limit 5;
    其他内容不写了
      

  13.   

      分页有几种组件的.如display组件(用人很多的)
      

  14.   

    就是啊top 5就不搞定了吗。如果是想控制每行显示的条数,请看下面代码:
    <div style="height:200px; width:78%; margin:10px auto;padding:5px 10px 5px 10px; text-align:center;" > 
    <table  cellspacing="3"> <tr> 
            <% 
      if(coll2!=null && !coll2.isEmpty()){ 
      Iterator newsit=coll2.iterator(); 
      int i=0; 
      while(newsit.hasNext()){ 
      OrganizationForm organizationForm=(OrganizationForm)newsit.next(); 
      int id=organizationForm.getId().intValue(); 
      String name=new String(organizationForm.getName()); 
      String url=new String("organization.do?action=organizationDetail&organizationid="+id); 
      if(i%3==0){ 
      out.print(" <tr> </tr>"); 
          } 
      out.print(" <td> <ul class='nav4'> <li>"); 
      out.print(" <a href='"+url+"'>"+"·" + name+" </a>"); 
          out.print(" </ul> </li> </td>"); 
    i++; 

    }%>
     </table>
     </tr> 
        </div>只要看if后的东西就行了,前面的是我项目中的,直接复制给你的,if(i%3==0)这个是控制每行显示三列,这个是在表格的内容中加了连接的。
      

  15.   

    本文以循序渐进的方式给出了用jsp处理分页显示的一个可重用,易于移植的实现。 如果把与各种商业逻辑实体相对应的数据叫做"实体数据",那么分页显示逻辑要封装的就是控制实体数据的"控制数据"(下文中沿用这两种说法). 首先让我们构建一个PageControl对象将分页所涉及到的一些关键的"控制数据"予以封装. 
    具体说明如下: 1.public int curPage ; //当前是第几页 
    2.public int maxPage ; //一共有多少页 
    3.public int maxRowCount ; //一共有多少行 
    4.public int rowsPerPage ; //每页有多少行 
    5.public yourDataType yourdata ;//装载每页的数据 
    关于每页所要显示的"实体数据"的载体,其实现方式多种多样,比如说在IBM电子商务系统MPE中是以bean的形式,这是一种面向对象的实现,比较的简略的实现可用java.util.Vector等,为了避免分散对核心问题的的注意力,这里用youDataType予以抽象. 
    6.public void countMaxPage() {    //根据总行数计算总页数   
         if (this.maxRowCount % this.rowsPerPage==0){ 
            this.maxPage = this.maxRowCount/this.rowsPerPage; 
         }else{ 
            this.maxPage = this.maxRowCount/this.rowsPerPage + 1;         
             } 
         } 
    this.rowsPerPage其实应从配置文件中获得,这样做的好处是程序能在运行中读取从而实现动态(再)配置,简略的做法是直接写在程序中。 
    7.public PageControl(yourPersistenceLayer yourPL) 
    这是一个参数类型为yourPersistenceLayer的构造函数.PersistenceLayer是直接同数据库打交道的一层,不同的公司都有不同的实现,比如说Microsoft的ADO就可以看作是一PersistenceLayer,IBM在其MPE系统中也实现了一个庞大的PersistenceLayer,. 一种投机的做法是不要PersistenceLayer,或者可以说是淡化该层,这样做势必降低系统的稳定性,可重用性,可扩展性。具体可以参考附录文献.在这个构造函数中,有这样几个主要操作:     this.maxRowCount = yourPL.getAvailableCount();   //得到总行数 
         this.yourdata     = yourPL.getResult();           //得到要显示于本页的数据 
         this.countMaxPage();                          //计算总页数 关于this.yourdata这里还有一个细节:在从数据库中获取"实体数据"时,通常有两种方式:(A)一次性获取所有数据;(B)每次根据当前页号,获取本页的数据,将其它数据予以抛弃;考虑到数据往往是大量甚至是海量的,如果一次性的获取,那么这些数据必然大量占用服务器内存资源,使系统性能大大降低,因此建议使用方法(A) 接下来的工作就可以交给servlet和jsp了 
    在servlet的service()方法中只需进行如下操作: PageControl   pageCtl = yourBusinessObject.listData(req.getParameter("jumpPage")); 
    req.setAttribute("pageCtl",pageCtl); 说明:yourBusinessObject封装了商业逻辑,是位于Business Logic Layer中的一个对象,运用OOAD的方法,封装商业对象,在Persistent Layer之上组建坚实的Business Logic Layer同样是构建大型电子商务架构的关键所在。本文的关注点只是分页处理,暂不详细论述. 
    在每个想要实现翻页显示数据的jsp页面中,我们的工作也很简单,其代码是公式化的: <jsp:useBean id="pageCtl" class="yourpackage.PageControl" scope="request">;</jsp:useBean>; 
    <%if(pageCtl.maxPage!=1)){%>; 
    <form name="PageForm"   action="/servlet/yourpackage.yourservlet" method="post">; 
    <%@ include file="/yourpath/pageman.jsp"%>; 
    </form>; 
    <%}%>; 
    说明: 
    1.if(pageCtl.maxPage!=1)实现了这样一个逻辑:如果所取得数据不足一页,那么就不用进行翻页显示。 
    2.我们注意到<%@ include file="/yourpath/pageman.jsp"%>;这使得真正的翻页部分完全得到了重用. 那么pageman.jsp到底做了些什么呢?它实现了经常做翻页处理的人耳熟能详的逻辑 
    (A)第一页时不能再向前翻; 
    (B)最后一页时不能再向后翻; 
    同时能够进行页面任意跳转,具体代码如下: 每页<%=pageCtl.rowsPerPage%>;行 
    共<%=pageCtl.maxRowCount%>;行 
    第<%=pageCtl.curPage%>;页 
    共<%=pageCtl.maxPage%>;页 ; 
    <%if(pageCtl.curPage==1){ out.print(" 首页 上一页");    }else{   %>;    
    <A HREF="javascript:gotoPage(1)">;首页</A>; 
    <A HREF="javascript:gotoPage(<%=pageCtl.curPage-1%>;)">;上一页</A>; 
    <%}%>; 
    <%if(pageCtl.curPage==pageCtl.maxPage){ out.print("下一页 尾页");    }else{   %>;    
    <A HREF="javascript:gotoPage(<%=pageCtl.curPage+1%>;)">;下一页</A>; 
    <A HREF="javascript:gotoPage(<%=pageCtl.maxPage%>;)">;尾页</A>; 
    <%}%>; 
    转到第<SELECT name="jumpPage" onchange="Jumping()">; 
          <% for(int i=1;i<=pageCtl.maxPage;i++)   { 
          if (i== pageCtl.curPage){ 
          %>; 
          <OPTION selected value=<%=i%>;>;<%=i%>;</OPTION>; 
          <%}else{%>; 
          <OPTION value=<%=i%>;>;<%=i%>;</OPTION>; 
          <%}}%>;    
          </SELECT>;页 
      

  16.   

    楼上各位的发言都比价精彩,我给出我的意见:
    1)从便于扩展来说,不要在jsp里面写任何java代码,一定要分层,所以,struts的引用还是必要的。
    2)关于分页,各位说的都是基于具体的数据库的,比如top 5等等。这是sqlserver的语法,但对oracle,mysql等数据库就不适合。Hibernate是比较流行的数据库层中间件,封装了对主流数据库的访问和操作,所以,后台用Hibernte也理所当然了。好了,下面可以开始了。我们的代码就是基于Struts+Hibernate的。Spring也可以加进来,但与本话题相关性不大,暂时不提。
    我不写大段的代码,只写出核心的部分,这样各位看起来有条理性,从整体把握。
    1)Struts负责从界面获取上一页、下一页、首页、末页、每页大小之类的控制命令以及显示总页数、总条数己每页具体数据。具体分页查询在Hibernate中实现
    2)Hibernate的业务类进行具体查询,参数由Struts的Action业务类传递,最核心的参数包括下面两个:
       当前页序号  currentpage
       每页大小    pagesize
      这样就可以完成分页了。当然,如果还要条件查询,还需要传入查询条件。 在Hibernate的业务类中,你只需写入下面两行代码就可以搞定:
     query.setMaxRecords(pagesize);  //设置每页数据条数,query是Query的实例
     
     querysetFirstRecord(pagenum);  //设置当前页的第一行数据索引号 其中pagenum=(currentpage-1)*pagesize + 1
     举例来说,第一页是1-10,第二页是11-20
     可以看出规律:每页的第一条数据索引和页编号、页大小关系就是上述公式计算得到 好了,List list = query.list();  这样你就得到了一页数据了。Hibernate为你封装了具体实现,不管是什么数据库,都可以这样写,Hibernate根据当前数据库的Dialect属性,自动转换成具体的sql,比如sqlserver就是各位说的top 10,oracle则是rownum,mysql则是limit 至于显示,就不说了吧,用struts的标签库就可以完成 主要用到的标签有:<logic:present>
                      <logic:iterate></logic:iterate>
                    </logic:present>          
     
      
    有遗留问题可以联系我:[email protected]
      

  17.   


    我也听到很多大虾这么说,jsp页面不要有java代码!!
    最近刚学struts,logic标签还在学习!!
      

  18.   

     select top 5 * from 表名  //只用查询前五条数据!
    int rowBegin=0;
    rowBegin=num*(page-1);
    String sql="select top 5 * from 表名  where id not in(select top "+rowBegin+" id from 表名)";//也可以进行一下排序,这是查询你要查的下几个五条的信息,也就是说page=1,是查第一  个五条,page=2是差第二个五条//循环遍历输出//做翻页就进行传递参数List list=new 类名.方法名;
    if(list!=null&&list.size()!=0)
    {
    for(int i=0;i<list.size();i++)
    {
    属性类 p=(属性类)list.get(i);
    %>
    <table>
    <tr>
    <td><%=p.getName()%></td>
    <td><%=p.getSex()%></td>
    <td><%=p.getBirthday()%></td>
    <td><%=p.getNation()%></td>
    <td><%=p.getCity() %></td>
    </tr>
    </table>
    <%
    }
    }
    %>