每翻一页,都去数据库中查一次。这种分页效果用java怎么写?

如题所述

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

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

  private final static int skip = 100;

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

  private static int cur = 0;

  3.定义一个resultset全局变量,以便多次使用

  private static java.sql.result rs = null;

  4.打开一个数据库连接[/pre]

  class.forname( sqldriver );  java.sql.connection conn = drivermanager.getconnection( url, (string)username,(string)passwd)  statement stmt = conn.createstatement();  string searchsql = "......";  rs = stmt.executequery(searchsql);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-14
数据量较大的时候不能用全部查出的方法,只能分次进行查询。
每次点击翻页,都会传出一个当前页码的变量。然后服务代码接收到这个变量以后,配合上每页显示的记录数去数据库里进行限定位置的查询。
SELECT * from table WHERE ROWNUM>curr*size ROWNUM<=(curr-1)*size
curr代表当前页码变量,size代表每页显示条数。
第2个回答  2013-07-14
翻页功能可以直接用sql存储过程完成(比如一页显示5行数据)
create proc proc_fanye
@id int,
@page int
as
select top(5) *from tabelName where id not in (select top(5*(@page-1)) *from tabelName where id=@id)

proc_fanye 1,1 (查询id=1的 第一页)
proc_fanye 1,2 (查询id=1的 第二页)
·······本回答被网友采纳
第3个回答  2013-07-14
不知道你说的是什么数据库
列举几种数据库,
你只需要根据SQL来传参数就好了
1. ORACLE
SELECT * FROM TABLE1 WHERE ROWNUM<=N
2. DB2
SELECT * ROW_NUMBER() OVER(ORDER BY COL1 DESC) AS ROWNUM WHERE ROWNUM<=N
或者
SELECT COLUMN FROM TABLE FETCH FIRST N ROWS ONLY
3. INFORMIX
SELECT FIRST N * FROM TABLE1

4. SQL SERVER
SELECT TOP N * FROM TABLE1
5. SYBASE
SET ROWCOUNT N
GO
SELECT * FROM TABLE1
6. MYSQL
SELECT * FROM TABLE1 LIMIT N
7. FOXPRO
SELECT * TOP N FROM TABLE ORDER BY COLUMN
相似回答