必威体育Betway必威体育官网
当前位置:首页 > IT技术

sql语句 实现分页

时间:2019-09-01 11:12:13来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

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,并定义在分页输出数据中使用的参数;

复制代码

<%@page contentType="text/html" pageEncoding="GBK" import="java.sql.*,java.util.*,java.lang.*"%>
<jsp:useBean id="selectall" scope="page" class="com.pkh.dao.UserDao"></jsp:useBean>
<%!
      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()) {                              //循环输出查询结果
%>
<tr>
      <td nowrap><span class="style3"><%=Rs.getString("CID")%></span></td>
      <td nowrap><span class="style3"><%=Rs.getString("CName")%></span></td>
      <td nowrap><span class="style3"><%=Rs.getString("CStartDate")%></span></td>
</tr>
<%
      }
      selectall.closeConnection();                         //关闭数据库
%>

复制代码

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

复制代码

<tr>
      <td width="251">
            [<%=CurrPage%>/<%=CountPage%>] 每页5条 共<%=CountRow%>条记录<%=(CurrPage - 1) * 5 + 1%>
      </td>
      <td width="260"><p align="right">
<% if (CurrPage > 1) {   %>
      <a href="index.jsp?Page=<%=CurrPage - 1%>">上一页</a>
<% }    %>
<% if (CurrPage < CountPage) { %>
      <a href="index.jsp?Page=<%=CurrPage + 1%>">下一页</a>
<% }    %>
      <a href="index.jsp?Page=<%=CountPage%>">最后一页</a></p>
      </td>
</tr>

相关阅读

使用JDBC连接MySQL数据库操作增删改查(非常详细,适合学

目录 1.首先这个Myeclipse的包名以及一些实现的类(这样子写是我的习惯)   2.接下来我们创建数据库(MySQL) 3.在数据库里面添加数

SqlServer 游标学习

目录 前言: 游标简介: 游标的管理: 1.声明游标 2.打开游标 3.读取游标 4.关闭游标 5.释放游标 举个综合的例子: 前言: select语句

sql中 ${}和#{}的区别

<span style="font-size:18px;">delete from ups_role_permission_dataparams where role_id = #{roleId,jdbcTy

SQL中Group分组的使用

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

mysql创建用户并赋权

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

分享到:

栏目导航

推荐阅读

热门阅读