`

分页显示从数据库中读出的记录

 
阅读更多

现象:

在用JDBC访问某个数据库,并读出一个ResultSet数据记录集时,如果记录数太大,则
会占用客户端(运行java程序的机器)的大量内存(如果客户端是某个大企业的营业部门的
代理点分机,则有可能java程序会占用完全部内存,然后报错),并且会造成客户端负载过
重,运行速度极度缓慢(在sybase数据库中,我曾做过一个测试。选择某个大数据记录,
SQL语句运行完需要4分钟,而在java客户端完全显示出来,则需要将近10分钟)。
解决方案:

给用户提供一个可选择分页显示的选项,如果用户不想分页显示则完全显示,否则分页显示。

1.定义一个分页数全局常量,即每页显示的数据条数。
privatefinalstaticintSKIP=100;

2.定义一个确定某个分页条数的全局变量,即该显示页的当前显示数据条数。
privatestaticintcur=0;

3.定义一个ResultSet全局变量,以便多次使用
privatestaticjava.sql.Resultrs=null;

4.打开一个数据库连接
Class.forName(sqlDriver);
java.sql.Connectionconn=DriverManager.getConnection(URL,(String)userName,(String)Passwd)
Statementstmt=conn.createStatement();
StringsearchSql="......";
rs=stmt.executeQuery(searchSql);

5.获取查询结果集数据(一般是在查询按钮的响应事件函数里)
......
nextButton.setEnable(true);
cur=0;
while(cur<SKIP&&rs.next()){
cur++;
.....(获取rs中的记录,存入java程序的变量中)
}

6.显示下一页的结果集数据(一般是在下页按钮的响应事件函数里)

if(rs.getRow()==0)
{
nextButton.setEnable(false);
closeConnection();--rs的cursor已经到了最后,结果集显示完毕,关闭此次的连接
}
cur=0;
if(rs!=null&&rs.getRow()>0)
{
....将上页显示的内容清除
while(cur<SKIP&&rs.next())
{
cur++;
.....(获取结果集中的记录,存入java程序的变量中)
}
}

缺陷:
此方法根据2.0版本的JDBC(具体和JDBC驱动程序的提供商有关)之前的ResultSet
类产生,因为ResultSet无法将已经显示的结果集回滚,所以此法只能按照ResultSet类的
定义,从左往右、从前往后的浏览数据结果。无法动态显示指定任意前后的结果集数据。

分享到:
评论

相关推荐

    mysql 分页优化解析

     SQL数据库分页:用存储过程+游标方式分页,具体实现原理不是很清楚,设想如果用一次查询就得到需要的结果,或者是id集,需要后续页时只要按照结果中的IDs读出相关记录。这样只要很小的空间保留本次查询的所有IDs....

    C# winform程序实现分页的方法

    一次性读出全部数据会影响程序的占用率,造成计算机的“短路”。呵呵,那好把,这次用数据库的存储过程去实现分页,这样是每次按一定数量去读取数据记录,这种方法应该是目前最稳定和最省资源的方法了

    php中单个数据库字段多列显示(单字段分页、横向输出)

    今天在做项目时,遇到个问题就是把从数据库读出来的同一字段分行分列显示,就是每行显示12列,根据总记录数控制循环行数。如果是多字段很好实现,一个循环搞定,如果是一个字段循环那么就比较麻烦了,需要同时用到多...

    C#程序开发范例宝典(第2版).part13

    实例076 将数据库数据显示到树视图中 100 实例077 用TreeView控件制作导航界面 102 实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 ...

    C#程序开发范例宝典(第2版).part08

    实例076 将数据库数据显示到树视图中 100 实例077 用TreeView控件制作导航界面 102 实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 ...

    C#程序开发范例宝典(第2版).part02

    实例076 将数据库数据显示到树视图中 100 实例077 用TreeView控件制作导航界面 102 实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 ...

    C#程序开发范例宝典(第2版).part12

    实例076 将数据库数据显示到树视图中 100 实例077 用TreeView控件制作导航界面 102 实例078 用TreeView控件遍历磁盘目录 102 实例079 修改TreeView控件中的节点 105 实例080 将XML文件节点绑定到TreeView控件中 ...

    MySQL5 权威指南第3版中文版_part1

     15.8 分页显示查询结果  15.9 处理层次化数据  15.10 速度优化  15.11 Unicode  15.12 二进制数据(BLOB)和图像  15.13 存储过程  15.14 SP Administrator  第16章 Perl  16.1 编程技巧  16.2 示例:...

    C#.net_经典编程例子400个

    89 2.8 TreeView控件应用 91 实例073 将数据库数据显示到树视图中 91 实例074 用TreeView控件制作导航界面 93 实例075 用TreeView控件遍历磁盘目录 94 实例076 TreeView控件在数据库中的...

    MySQL 5权威指南(第3版) 中文版 下载地址

     15.8 分页显示查询结果  15.9 处理层次化数据  15.10 速度优化  15.11 Unicode  15.12 二进制数据(BLOB)和图像  15.13 存储过程  15.14 SP Administrator  第16章 Perl  16.1 编程技巧  16.2 ...

    十天学会ASP.net--我认为ASP.NET比ASP难很多,希望大家做好准备

    大家可以看到我们首先是连接数据库然后打开,对于select的命令,我们申明一个OleDbCommand来执行之,然后再申明一个OleDbDataReader,来读取数据,用的是ExecuteReader(),objDataReader.Read()就开始读取了,在输出...

Global site tag (gtag.js) - Google Analytics