sql分页

sql语句 实现分页

/*

分页思想:比如你要每页获取10条记录,当你显示第5页的记录时,

也就是选取第40条至50条的记录.首先应该从所有的记录集中选取

50条记录,同时进行倒序,再从中选10条,就完成工作了。

下面是一个具体的例子,从Northwind的orders表中选取OrderID大于@OrderID的记录集,

分10条每页显示.

*/

--有查询条件的分页存储过程

create procedure dbo.Orders_GetByPaging

@OrderID int,   --条件

@PageSize int,  --每页的记录数量,比如10条,传参数时就是10

@CurrentPage int  --第N页,比如第5页,传参数就是5

as

declare @PageCount int --可分页的数量

declare @RowsCount int  --符合查询条伯的记录行总数

declare @LastRows int   --整除后余下来的记录数

declare @SelectRowsCount int --要选择的行数

set @RowsCount=(select count(*) from dbo.Orders where OrderID>@OrderID)

set @PageCount=@RowsCount/@PageSize   --看下能分多少页

set @LastRows=@RowsCount%@PageSize

set @SelectRowsCount=@PageSize   --给要选取的行数赋值,如参数是10,就是每页10条记录

if(@LastRows>0)--当整除后还剩的记录数,比如总有95条记录符合,那就可以分10页,最后一页是5条记录

begin

set @PageCount=@PageCount+1  --如果不能整除时要多加一页

if(@CurrentPage>=@PageCount)  --如果选择的是最后一页时

set  @SelectRowsCount=@LastRows  --比如95条记录,第10页只能是5条记录

end

declare @SelectStr varchar(5000)

set @SelectStr='select top '+Convert(nvarchar(10),@SelectRowsCount)+'

* from

(select top '+Convert(nvarchar(10),(@CurrentPage)*@PageSize)+' * from

(select * from dbo.Orders where OrderID>'+Convert(nvarchar(10),@OrderID)+') as t1 order by OrderID asc) as t2 order by OrderID desc'

execute(@SelectStr)

======================

在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 TOP 10 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 class UserDao {

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();

}

return rs;

}

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。根据当前页面的参数获取到显示的数据集。代码如下:

String StrPage = request.getparameter("Page");

if (StrPage == null) { //判断当页面的值为空时

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条 共条记录

1) { %>

上一页

下一页

最后一页

相关阅读

目录

1.首先这个Myeclipse的包名以及一些实现的类(这样子写是我的习惯)

2.接下来我们创建数据库(MySQL)

3.在数据库里面添加数

目录

前言:

游标简介:

游标的管理:

1.声明游标

2.打开游标

3.读取游标

4.关闭游标

5.释放游标

举个综合的例子:

前言:

select语句

delete from

ups_role_permission_dataparams

where role_id = #{roleId,jdbcTy

1、概述“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小

新建一个数据库 ljwcreate   database ljw;[sql] view plain copy use ljw;  select * from user;  效果如上图,最后用数据

java分页sql语句_「sql分页」sql语句 实现分页 - seo实验室相关推荐

  1. java 字符串数组定义_「string数组」string 数组怎么定义 - seo实验室

    string数组 string数组的定义有三种: String arr[] = new String[10]; //创建一个长度为10的String 类型数组. String arr[] = {&qu ...

  2. java list打乱顺序_「collections.shuffle」Collections.shuffle()打乱List - seo实验室

    collections.shuffle java.util.Collections类下有一个静态的shuffle()方法,如下: 1)static void shuffle(List> list ...

  3. dct变换可以用什么方法代替_「dct变换」DCT变换自学笔记 - seo实验室

    dct变换 一.DCT简介 此处,DCT指Discrete Cosine Transform,意思是离散余弦变换(下文均用DCT表示),其常见用途是对音视频进行数据压缩.维基百科上的解释:DCT以不同 ...

  4. python二分法排序_「二分法排序」插入排序之二分法插入排序 - seo实验室

    二分法排序 简介 二分法插入排序的思想 对于每次循环,都有left,mid,right3个局部变量做支持. 将要插入的元素同mid位置元素比较,选择left - mid-1还是mid+1 - righ ...

  5. java -jar 指定端口_「Linux命令」-Java程序员需要掌握的10个命令

    作为服务端开发的同学,经常会与linux服务器打交道,一些用的命令必须要掌握. 1.top命令-观察服务端负载情况 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况 ...

  6. java 常用 函数式接口_「java8系列」神奇的函数式接口

    前言 在上一篇Lambda的讲解中我们就提到过函数式接口,比如:Consumer consumer = (s) -> System.out.println(s);其中Consumer就是一个函数 ...

  7. Java 字符串数组定义_「string数组」string 数组怎么定义

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. string数组的定义有三种: String arr[] = new String[1 ...

  8. 用matlab实现冒泡排序法,「冒泡排序算法」MATLAB实现冒泡排序算法 - seo实验室

    冒泡排序算法 本文转载自头条文章原文章地址 1.bubble_sort.m function y=bubble_sort(x) x_len=length(x); for i=1:x_len-1 for ...

  9. PLSQL执行SQL脚本文件「适用批量」- 工具使用篇

    前言 开局一条狗,装备全靠打 这篇文章应该是 2019 年最后一文章了,分享一下 PLSQL 是如何执行 SQL 脚本文件的. 关于执行 SQL 文件,下方是自己经常使用的一种方式,同样适用于批量文件 ...

  10. java执行sql文件_面试官:MyBatis SQL是如何执行的?把这篇文章甩给他

    初识 MyBatis MyBatis 是第一个支持自定义 SQL.存储过程和高级映射的类持久框架.MyBatis 消除了大部分 JDBC 的样板代码.手动设置参数以及检索结果.MyBatis 能够支持 ...

最新文章

  1. 31、如何安装第三方模块?以及用过哪些第三方模块?
  2. 2.MATLAB安装
  3. 把html变成桌面的软件,5 分钟把任意网站变成桌面软件
  4. ElasticSearch 知识点整理(入门)
  5. laravel安装笔记
  6. 5d4的白平衡模式_佳能5D4有什么白平衡模式?ISO是多少?
  7. 前端代码规范网址导航(总结)
  8. Project Euler 001-006 解法总结
  9. exp导出excel oracle_OracleToExcel_Oracle导出excel数据(OracleToExcel)下载 v3.1 官方版 - 121下载站...
  10. 突击计划——求n的阶乘
  11. sublime test3 安装及配置
  12. idle运行python_python中的idle是如何运行的
  13. 电机精密运动控制专家电机驱动芯片TMC260
  14. Adobe reader 添加注释后,点击保存,强制要求另存为
  15. LaTeX的长度单位
  16. 数据结构(二十) -- C语言版 -- 树 - 霍夫曼树(哈夫曼树、赫夫曼树、最优二叉树)、霍夫曼编码
  17. 单例模式——解决MDI子窗体实例化的问题
  18. IDEA中运行maven多模块项目,提示程序包xxxx不存在
  19. JAVA基础第三章 面向对象进阶--多态等
  20. 在高德地图中获取鼠标点击的经纬度

热门文章

  1. 第一篇博客------自我介绍篇
  2. Linux下date命令详解及C/C++代码实现
  3. linux中vim如何查找字符串,[ubuntu] 在vim中查找指定字符串和指定文件
  4. QThread :Destroyed while thread is still running
  5. 远处的是风景,近处的才是人生
  6. 交通规划、交通设计主题汇总(更新至2023年1月27日)
  7. activity 转场动画不生效_replugin插件化,插件转场动画失效的问题解决
  8. 简单使用MVP+Retract+Rxjava视频播放
  9. 注册域名前,你必须想明白的4个重要问题
  10. (7)OpenGL多视口变换函数:glViewport使用