`
dongguoh
  • 浏览: 70671 次
  • 性别: Icon_minigender_1
  • 来自: 山水之乡
社区版块
存档分类
最新评论

分页功能已经实现,怎样修改才会更合理

    博客分类:
  • JAVA
阅读更多
这个分页代码功能是实现啦,我用的是Mysql的数据库
请你们给些意见,该怎样修改才会使它会更好用,并且更合理
java 代码
  1. package com.gjx.util;   
  2.   
  3. import java.sql.ResultSet;   
  4. import java.sql.SQLException;   
  5.   
  6. import org.apache.commons.logging.Log;   
  7. import org.apache.commons.logging.LogFactory;   
  8.   
  9. public class Pager {   
  10.     private static final Log logger=LogFactory.getLog(Pager.class);   
  11.     //总的行数   
  12.     private int count;   
  13.     //每页显示的数量      
  14.     private int length;   
  15.     //偏移量   
  16.     private int offset;   
  17.     //总共有多少页   
  18.     private int  size;   
  19.     //所传进来的页码数为   
  20.     private int pageNum;   
  21.     ResultSet rs=null;   
  22.        
  23.        
  24.     public Pager(ResultSet rs,int pageNum,int length){   
  25.         this.rs=rs;   
  26.         this.length=length;   
  27.         this.pageNum=pageNum;   
  28.     }   
  29.     public int getRows(){   
  30.         try {   
  31.             rs.last();   
  32.             count =rs.getRow();   
  33.             rs.first();   
  34.         } catch (SQLException e) {   
  35.             logger.error("取得数据结果集行数时出错"+e);   
  36.         }   
  37.         return count;          
  38.     }   
  39.     public int getSize(){   
  40.   
  41.         size=(this.getRows()%this.length)==0?this.getRows()/this.length:this.getRows()/this.length+1;   
  42.         return size;   
  43.     }   
  44.     public int getOffset(){    
  45.         this.getRows();   
  46.         this.getSize();        
  47.         offset=(this.pageNum-1)*length>=0?(this.pageNum-1)*length:0;   
  48.   
  49.         return offset;   
  50.     }   
  51.   
  52. }   

 

 

java 代码
  1. //取得每页显示的数量条数   
  2.     public List getAccountList(HttpServletRequest request, int pageNum, int length) {   
  3.         List<Account> list = new ArrayList<Account>();   
  4.         String sql = "select * from account";   
  5.         //HttpServletRequest request=null;   
  6.   
  7.         try {   
  8.             // conn = dbc.getConnection();   
  9.             conn = Factory.getDBConnection().getConnection();   
  10.             stmt = conn.createStatement();             
  11.             rs = stmt.executeQuery(sql);   
  12.             Pager pager=new Pager(rs,pageNum,length);   
  13.             request.setAttribute("size",pager.getSize());   
  14.             sql = "select * from account limit "+pager.getOffset()+","+length;   
  15.             rs = stmt.executeQuery(sql);   
  16.             while (rs.next()) {   
  17.                 Account account = new Account();   
  18.                 account.setUserId(rs.getString("userId"));   
  19.                 account.setUsername(rs.getString("username"));   
  20.                 account.setPassword(rs.getString("password"));   
  21.                 account.setLevel(rs.getInt("level"));   
  22.                 account.setEmail(rs.getString("email"));   
  23.                 list.add(account);   
  24.             }   
  25.             this.close();   
  26.         } catch (SQLException e) {   
  27.             System.err.println("当执行静态的Statement 语句 时出错,错误原因:" + e);   
  28.             e.printStackTrace();   
  29.         }   
  30.   
  31.         return list;   
  32.     }  
分享到:
评论
8 楼 movingboy 2007-08-30  
用ResultSet分页效率太低了,最好能直接利用数据库本身的能力
如果要考虑支持不同的数据库,可以定义一个接口,针对不同的数据库分别实现
6 楼 viewtifuljoey 2007-08-29  
<br/>
<strong>dongguoh 写道:</strong><br/>
<div class='quote_div'>
<div class='code_title'>这个分页代码功能是实现啦,我用的是Mysql的数据库</div>
<div class='code_title'>请你们给些意见,该怎样修改才会使它会更好用,并且更合理</div>
<div class='code_title'> </div>
<div class='code_title'>java 代码</div>
<div class='dp-highlighter'>
<div class='bar'> </div>
<ol class='dp-j'>
    <li class='alt'><span><span class='comment'>//取得每页显示的数量条数 </span><span>  </span></span></li>
    <li class=''><span>    </span><span class='keyword'>public</span><span> List getAccountList(HttpServletRequest request, </span><span class='keyword'>int</span><span> pageNum, </span><span class='keyword'>int</span><span> length) {   </span></li>
    <li class='alt'><span>        List&lt;account&gt; list = &lt;/account&gt;</span><span class='keyword'>new</span><span> ArrayList&lt;account&gt;();   &lt;/account&gt;</span></li>
    <li class=''><span>        <font color='#ff0000'><strong>String sql = </strong></font></span><font color='#ff0000'><strong><span class='string'>"select * from account"</span></strong></font><span><font color='#ff0000'><strong>;  </strong></font> </span></li>
    <li class='alt'><span>        </span><span class='comment'>//HttpServletRequest request=null; </span><span>  </span></li>
    <li class=''><span>  </span></li>
    <li class='alt'><span>        </span><span class='keyword'>try</span><span> {   </span></li>
    <li class=''><span>            </span><span class='comment'>// conn = dbc.getConnection(); </span><span>  </span></li>
    <li class='alt'><span>            conn = Factory.getDBConnection().getConnection();   </span></li>
    <li class=''><span>            stmt = conn.createStatement();             </span></li>
    <li class='alt'><span>            rs = stmt.executeQuery(sql);   </span></li>
    <li class=''><span>            Pager pager=</span><span class='keyword'>new</span><span> Pager(rs,pageNum,length);   </span></li>
    <li class='alt'><span>            request.setAttribute(</span><span class='string'>"size"</span><span>,pager.getSize());   </span></li>
    <li class=''><span>           <font color='#ff0000'> <strong>sql = </strong></font></span><font color='#ff0000'><strong><span class='string'>"select * from account limit "</span><span>+pager.getOffset()+</span><span class='string'>","</span></strong></font><span><strong><font color='#ff0000'>+length;</font> </strong>  </span></li>
    <li class='alt'><span>            rs = stmt.executeQuery(sql);   </span></li>
    <li class=''><span>            </span><span class='keyword'>while</span><span> (rs.next()) {   </span></li>
    <li class='alt'><span>                Account account = </span><span class='keyword'>new</span><span> Account();   </span></li>
    <li class=''><span>                account.setUserId(rs.getString(</span><span class='string'>"userId"</span><span>));   </span></li>
    <li class='alt'><span>                account.setUsername(rs.getString(</span><span class='string'>"username"</span><span>));   </span></li>
    <li class=''><span>                account.setPassword(rs.getString(</span><span class='string'>"password"</span><span>));   </span></li>
    <li class='alt'><span>                account.setLevel(rs.getInt(</span><span class='string'>"level"</span><span>));   </span></li>
    <li class=''><span>                account.setEmail(rs.getString(</span><span class='string'>"email"</span><span>));   </span></li>
    <li class='alt'><span>                list.add(account);   </span></li>
    <li class=''><span>            }   </span></li>
    <li class='alt'><span>            </span><span class='keyword'>this</span><span>.close();   </span></li>
    <li class=''><span>        } </span><span class='keyword'>catch</span><span> (SQLException e) {   </span></li>
    <li class='alt'><span>            System.err.println(</span><span class='string'>"当执行静态的Statement 语句 时出错,错误原因:"</span><span> + e);   </span></li>
    <li class=''><span>            e.printStackTrace();   </span></li>
    <li class='alt'><span>        }   </span></li>
    <li class=''><span>  </span></li>
    <li class='alt'><span>        </span><span class='keyword'>return</span><span> list;   </span></li>
    <li class=''><span>    }  </span></li>
</ol>
</div>
</div>
<br/>
<br/>
<span>getAccountList这个是客户代码,客户传入的是全表数据,感觉实际情况下,大部分分页不会做全表查询的,只要大一点数据量的应用,128M heap应该是会OutOfMemory。所以个人认为设计给客户的接口不是太实用的。<br/>
</span>
5 楼 wolfwood 2007-08-29  
tabletags是struts2.0很好的一个实现,可以直接使用

数据访问结构建议用hibernate,比较省事
4 楼 blu3leaf 2007-08-24  
MS 可以用hibernate去实现读取数据,这样就通用了
3 楼 leeon 2007-08-24  
Pager就是pager,它只应该是一个记录分页信息的model
最好不要把它和resultset这样的类耦合

然后getAccountList中,从Pager读取startRow和Length,组合翻页的sql,最好在通过select count(1) from 的方式在发起一起查询,查出总记录数,然后把总记录数回填到Pager中,最后把pager和分页查询出的记录集一起给页面显示
2 楼 xiaoxiaodi5834 2007-08-20  
同意楼上的。

如果要做成通用的分页,直接把集合传进去,再对这个集合处理应该是最好的。如果传RS可能会有内存泄露的危险。
1 楼 refactoring 2007-08-16  
是不是和java.sql.ResultSet结合的有点紧了?
取得数据的时候可不可以通过一个接口,由客户代码决定给一个什么样的List进来,实现委托给客户的代码。int pageNum, int length扔给客户实现。

最好是实现无关,个人以为现实中可能很多情况不是用ResultSet的。

相关推荐

    分页功能实现java

    综上所述,实现分页功能不仅需要前端页面的支持,更依赖于后端Java代码的逻辑处理。通过合理的前后端协作,可以实现功能强大且用户体验良好的Web应用分页功能。在Java的Eclipse开发环境中,结合Struts和Hibernate...

    ssh框架实现的分页功能

    综上所述,SSH框架下的分页功能实现涉及多个层次的配合,从接收用户请求到展示分页数据,需要理解并熟练掌握每个组件的作用。通过这个示例,初学者可以了解到SSH框架在实际项目中的应用,以及如何结合前端技术实现...

    jsp中如何实现分页功能

    本文将详细介绍如何在JSP中实现分页功能,主要涉及以下几个方面: 1. **理解分页原理**:分页的基本原理是将大数据集分割成若干个小部分,每次只加载一部分到客户端。在JSP中,我们需要知道当前页码和每页显示的...

    javaweb mysql实现分页功能

    在JavaWeb开发中,分页功能是不可或缺的一部分,特别是在处理大量数据时,为了提高用户体验,我们需要将结果集分块展示,而不是一次性加载所有数据。在这个例子中,我们将使用MySQL数据库来实现这一功能。 首先,...

    实现分页功能

    在网页开发中,分页功能是一项非常常见的需求,它能够帮助用户更有效地浏览大量数据,避免一次性加载过多内容导致页面响应变慢或者消耗过多的网络资源。本篇将详细讲解如何实现分页功能,主要围绕标题和描述提及的...

    datalist分页技术及实现

    总结起来,Datalist分页技术是一种实用的网页开发技巧,它通过合理地组织和加载数据,提高了页面性能,提供了更好的用户体验。开发者需要掌握相关的前端和后端知识,以及适当的库和工具,才能有效地实现和优化这一...

    mysql数据库实现分页

    总结,MySQL的分页功能是处理大数据量查询的关键技术,通过合理使用`LIMIT`和`OFFSET`,配合索引优化,可以有效地提高查询效率,提升用户交互体验。同时,随着版本升级,MySQL提供了更多分页策略和技术,如窗口函数...

    JSP中实现分页功能

    在Java服务器页面(JSP)中实现分页功能是一项常见的任务,特别是在开发Web应用程序时,尤其是在数据量较大的情况下,为了提高用户体验,需要将大量数据分段显示。分页不仅可以优化加载速度,还可以使得用户更容易...

    JS 实现web分页打印功能

    综上所述,通过合理地使用`Window.print()`方法结合CSS样式控制和JavaScript逻辑,我们可以实现一个强大的Web分页打印功能。确保对各种浏览器进行充分测试,并根据需要进行优化,以提供最佳用户体验。

    nodejs mysql 实现分页的方法

    本文主要介绍了在Node.js环境下,如何使用MySQL数据库实现分页功能。 首先,分页的基本思路是确定每页显示的数据条目数(即页面大小),然后根据当前页码计算查询数据的起始位置和结束位置。在MySQL中,我们通常...

    自定义QTableWidget实现分页。

    在QT编程中,QTableWidget是一个非常常用的控件,用于展示二维数据,但它本身并不支持内置的分页功能。在处理大量数据时,这可能会导致性能问题,因为所有的数据都会一次性加载到内存中。为了解决这个问题,我们可以...

    分页功能的实现

    本话题主要围绕"分页功能的实现"进行详细介绍,结合提供的文件名`pagetest.jsp`和`Easy_Buy.txt`,我们可以推测这是一个基于Java的JSP(JavaServer Pages)实现的分页示例。 1. **分页的基本概念** 分页是一种将...

    Struts + Hibernate 实现简单分页功能

    总的来说,使用Struts和Hibernate实现分页功能,需要结合MVC模式和ORM思想,合理设计数据访问层和业务逻辑层,同时确保前端与后端的有效通信。这个过程涉及到了Java编程、数据库操作、框架理解和页面渲染等多个方面...

    JAVA分页实现JAVA+JS+HTML

    4. **响应式布局**:确保在不同设备和屏幕尺寸下,分页功能依然可用且布局合理。 在实际项目中,分页实现可能更为复杂,例如需要考虑性能优化,比如预加载相邻页数据,或者使用懒加载来减少初始加载时间。同时,...

    SSM框架分页的实现

    SSM框架,即Spring、SpringMVC和...以上就是SSM框架下分页功能的实现步骤和关键点,通过合理配置和使用,可以有效地提高Web应用的性能和用户体验。在实际项目中,还需要根据具体需求和业务逻辑进行适当的调整和优化。

    使用jdbc_oracle实现的分页功能

    本示例着重讲解如何利用JDBC和Oracle数据库实现分页功能,同时涵盖一个表的基本操作:增加、删除和修改。 首先,我们需要了解JDBC。JDBC是Java API,它提供了一套标准接口,使得Java程序可以与各种类型的数据库进行...

    java小程序实现分页的功能

    本教程将详细介绍如何在Java中实现分页功能,包括首页、最后一页以及向前和向后翻页的逻辑。 1. **分页的基本原理** 分页的核心思想是将大量数据分成若干小块(页面),每次只加载一部分数据到内存中,而不是一次...

    Java web分页功能的实现添加功能借助Servlet实现

    在Java Web开发中,分页...总结,Java Web中的分页功能主要依赖于Servlet、JDBC和数据库操作,通过合理的SQL构建和页面渲染,可以提供良好的用户体验。在实际项目中,还需要关注性能优化、安全性以及代码的可维护性。

    .netpage分页多功能实现及实例demo

    本教程重点围绕".netpage分页多功能实现及实例demo"展开,旨在帮助开发者掌握多种分页形式的实现方法,并注重SEO优化。 首先,我们关注的是"分页控件"。在ASP.NET中,有许多内置的分页控件,如SqlDataSource的...

    LinQ TO SQL 实现分页功能

    标题"LinQ TO SQL 实现分页功能"指的是使用Microsoft的Language Integrated Query (LINQ)技术,结合SQL Server数据库,来实现数据查询时的分页显示。在.NET框架中,LINQ to SQL是面向对象的数据访问层,它允许开发者...

Global site tag (gtag.js) - Google Analytics