java分页的sql语句_利用SQL语句实现分页

1.概述

在网页中如果显示的数据太多就会占据过多的页面,而且显示速度也会很慢。为了控制每次在页面上显示数据的数量,就可以利用分页来显示数据。

2.技术要点

在SQL Server中要实现SQL分页,需要使用子查询来获取上一页的数据进行对比,进而获取最新的数据。使用子查询获取分页数据的语法格式如下:

"SELECT TOP [pageSize] * FROM [table] WHERE id NOT IN(

SELECT TOP [preNum] id FROM [table] ORDER BY ID DESC) ORDER BY ID DESC";

a. pageSize:数据分页的分页大小。

b. preNum:上一页数据查询的起始范围。

c. table:数据表名称。

例如要从数据库的第10条数据开始查询5条数据,编写的 SQL查询语句如下:

"SELECT TOP 5 * FROM tb_SQLServerFenye WHERE id NOT IN(

SELECT TOP10 id FROM tb_SQLServerFenye ORDER BY ID DESC) ORDER BY ID DESC";

在JDBCDao数据库操作类的getPageArgs()方法中就使用getProducts()方法中就使用了该语法获取指定页码的分页数据,关键代码如下:

//定义查询数据库的SQL语句

String sql= "SELECT TOP " + pageSize + " * FROM tb_SQLServerFenye" +

" WHERE id NOT IN(SELECT TOP " + (page - 1) * pageSize + " id FROM" +

" tb_SQLServerFenye ORDER BY ID DESC) ORDER BY ID DESC";

stmt=conn.createStatement();

rs= stmt.executeQuery(sql); //执行SQL并获取查询结果集

3.实现过程

(1)创建操作数据库类UserDao。通过构造方法UserDao()加载数据库驱动,定义Connection()方法创建与数据库的连接,定义selectStatic()方法执行查询操作,定义closeConnection()方法关闭数据库。其关键代码如下:

public classUserDao {

String url= "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_database04"; //url,数据库

String username="sa"; //用户名

String password=""; //密码

private Connection con = null;private Statement stmt = null;private ResultSet rs = null;public UserDao() { //通过构造方法加载数据库驱动

try{

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

}catch(Exception ex) {

System.out.println("数据库加载失败");

}

}public boolean Connection() { //创建数据库连接

try{

con=DriverManager.getConnection(url, username, password);

}catch(SQLException e) {

System.out.println(e.getMessage());

System.out.println("creatConnectionError!");

}return true;

}public ResultSet selectStatic(String sql) throws SQLException { //对数据库的查询操作

ResultSet rs=null;if (con == null) {

Connection();

}try{

stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

rs=stmt.executeQuery(sql);

}catch(SQLException e) {

e.printStackTrace();

}returnrs;

}public void closeConnection() { //关闭数据库的操作

if (con != null && stmt != null && rs != null) {try{

rs.close();

stmt.close();

con.close();

}catch(SQLException e) {

e.printStackTrace();

System.out.println("Failed to close connection!");

}finally{

con= null;

}

}

}

}

(2)创建index.jsp页面。首先通过JavaBean标签调用数据可靠操作类UserDao,并定义在分页输出数据中使用的参数;

int CountPage = 0;int CurrPage = 1;int PageSize = 5;int CountRow = 0;%>

然后,设置接收数据的参数,当第一次显示页面参数为空时,设为1。根据当前页面的参数获取到显示的数据集。代码如下:

CurrPage = 1; //赋值为1

} else{

CurrPage= Integer.parseInt(StrPage); //如果不为空则获取该值

}

String SQL= "Select * From tb_ClassList"; //定义查询语句

ResultSet Rs = selectall.selectStatic(SQL); //执行查询语句

Rs.last(); //获取查询结果集

int i = 0; //定义数字变量

CountRow = Rs.getRow(); //获取查询结果集的行数

CountPage = (CountRow / PageSize); //计算将数据分成几页

if (CountRow % PageSize > 0) //判断如果页数大于0

CountPage++; //则增加该值

Integer n = (CurrPage - 1) * 5 + 1; //定义变量上一页的结束值

SQL = "select top 5 * from tb_ClassList where CID>=" + "("

+ "Select Max(CID) From (Select top " +n.toString()+ " * From tb_ClassList) as Class" + ")";

Rs= selectall.selectStatic(SQL); //执行查询语句

while (Rs.next()) { //循环输出查询结果

%>

selectall.closeConnection();//关闭数据库

%>

设置下一页、上一页和最后一页超级链接,链接到index.jsp页面,指定Page作为栏目标识,将页数作为参数值,代码如下:

[/] 每页5条 共条记录
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值