不同数据库分页代码

SQL语句实现数据分页(SQLServer

SQLServer的分页依靠的是top这个属性。

1.分页方案一:(利用Not InSELECT TOP分页)

SELECT TOP 页大小 *
 FROM TestTable
 WHERE (ID NOT IN
           (SELECT TOP 
页大小*页数 id
          FROM 

          ORDER BY id))
 ORDER BY ID

2.分页方案二:(利用ID大于多少和SELECT TOP分页)

SELECT TOP 页大小 *
 FROM TestTable
 WHERE (ID >
           (SELECT MAX(id)
          FROM (SELECT TOP 
页大小*页数 id
                  FROM 

                  ORDER BY id) AS T))
 ORDER BY ID

 

常用的是方案1.这个不需要多说!

方案2有局限性。

hibernate对于分页就比较直接,Query接口提供有封装好的接口。

 Query q = session.createQuery("from Cat as c");
 q.setFirstResult(20);
 q.setMaxResults(10);
 List l = q.list();            
表示从第20数据开始,读取10条数据出来。

setFirstResult()从第几条数据开始读取

setMaxResults(100)读取几条数据出来

 

 

 

SQL语句实现数据分页(MySQL

MySQL实现数据分页依靠的是limit这个属性!

1. 标准查询语句:

select * from table(表名) limit startPos,pageSize

小结:

1.startPos:定义当前页起始位置 注意:当前页的起始位置只能在当前页确定之后才能定义;

2.pageSize:定义每页显示数据的条数

3.如果给定2个参数,第一个指定要返回的第一行的偏移量,第二个指定返回行的最大数目。初始行的偏移量是0(不是1)

如:select * from table LIMIT 5,10;           这个查询出来的是第615之间的10条数据

 如果给定一个参数,它指出返回行的最大数目。

如:select * from table LIMIT 5;                 这个查询出来的是前5条数据

LIMIT n等价于LIMIT 0,n

DB2的主要用到函数row_number() over()进行处理。

select * from select row_number() over() row, tmp.* from (select * from user ) tmp) where row>=40 and row<=50
这样的sql,即可取出用户表中第40-50条记录。

SQL语句实现数据分页(oracle

oracle是依靠rownum这个属性来分页的!

1. 标准的rownum分页查询使用方法:
    select *
      from (select c.*, rownum rn from content c)
     where rn >= 1 and rn <= 5

2.  排序的分页

 select *
      from (select rownum rn, t.*
              from (select title, addtime from content order by addtime desc/asc) t)
     where rn >= 1 and rn <= 5

总结:

rownumoracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2

,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。

举例:

例如表:student(学生)表,表结构为:
ID
        char(6)            --学号
name
   VARCHAR2(10)   --姓名
create table student (ID char(6), name VARCHAR2(100));
insert into sale values(''200001'',‘
张一’);
insert into sale values(''200002'',‘
王二’);
insert into sale values(''200003'',‘
李三’);
insert into sale values(''200004'',‘
赵四’);
commit;
1.等值查询
如果希望找到学生表中第一条学生的信息,可以使用rownum=1作为条件。但是想找到学生表中第二条学生

的信息,使用rownum=2结果查不到数据。因为rownum都是从1开始,但是1以上的自然数在rownum做等于判

断是时认为都是false条件,所以无法查到rownum = nn>1的自然数)。
select rownum,id,name from student where rownum=1;
2.
大于某值的查询条件
如果想找到从第二行记录以后的记录,当使用rownum>2是查不出记录的,原因是由于rownum是一个总是从

1开始的伪列,Oracle 认为rownum> n(n>1的自然数)这种条件依旧不成立(不能对rownum">")。可以

使用以下的子查询方法来解决。注意子查询中的rownum必须要有别名,否则还是不会查出记录来,这是因

rownum不是某个表的列,如果不起别名的话,无法知道rownum是子查询的列还是主查询的列。
select * from(select rownum no ,id,name from student) where no>2;
3.
小于某值的查询条件
select rownum,id,name from student where rownum <3   (取出前两条数据)
这下就可以解决取出第二条数据的SQl
select * from (select rownum no,id,name from student where rownum<3 ) where no >=2;
4.rownum
和排序
select rownum ,id,name from (select * from student order by name);

oracle rownum的使用(转)

对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
 
举例说明:
例如表:student(学生)表,表结构为:
ID
       char(6)      --学号
name
    VARCHAR2(10)   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的Java Swing连接数据库并实现分页的示例代码: ``` import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.table.DefaultTableModel; public class DatabasePaginationExample extends JFrame { private static final long serialVersionUID = 1L; private static final int PAGE_SIZE = 10; private Connection conn; private int currentPage = 1; private int totalRows; private int totalPages; private JTable table; private DefaultTableModel model; public DatabasePaginationExample() { setTitle("Database Pagination Example"); setDefaultCloseOperation(EXIT_ON_CLOSE); setSize(600, 400); setLocationRelativeTo(null); String[] columnNames = {"Name", "Age", "Gender"}; model = new DefaultTableModel(columnNames, 0); table = new JTable(model); add(new JScrollPane(table)); connectToDatabase(); loadPage(currentPage); setVisible(true); } private void connectToDatabase() { try { Class.forName("com.mysql.cj.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/mydatabase"; String username = "root"; String password = "password"; conn = DriverManager.getConnection(url, username, password); } catch (ClassNotFoundException | SQLException e) { JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } private void loadPage(int page) { try { String countQuery = "SELECT COUNT(*) FROM employees"; PreparedStatement countStmt = conn.prepareStatement(countQuery); ResultSet countResult = countStmt.executeQuery(); countResult.next(); totalRows = countResult.getInt(1); totalPages = (int) Math.ceil((double) totalRows / PAGE_SIZE); model.setRowCount(0); String query = "SELECT * FROM employees LIMIT ?,?"; PreparedStatement stmt = conn.prepareStatement(query); int offset = (page - 1) * PAGE_SIZE; stmt.setInt(1, offset); stmt.setInt(2, PAGE_SIZE); ResultSet result = stmt.executeQuery(); while (result.next()) { String name = result.getString("name"); int age = result.getInt("age"); String gender = result.getString("gender"); model.addRow(new Object[]{name, age, gender}); } } catch (SQLException e) { JOptionPane.showMessageDialog(this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); e.printStackTrace(); } } public static void main(String[] args) { new DatabasePaginationExample(); } } ``` 以上代码使用了MySQL数据库作为示例。你需要改变数据库驱动程序的名称、URL、用户名和密码以适应你自己的情况。 在 `loadPage` 方法中,第一个查询获取表的总行数,第二个查询使用 `LIMIT` 和 `OFFSET` 子句来获取当前页的数据行。`offset` 值是当前页数减一乘以每页的行数,它用于计算要跳过的行数。数据检索后,将其添加到表格模型中。 `connectToDatabase` 方法创建了一个 `Connection` 对象,它与数据库建立连接。 在 `main` 方法中,创建了一个 `DatabasePaginationExample` 对象,它创建了一个带有滚动条的表格和两个按钮。每次单击下一页按钮时,当前页面计数器 `currentPage` 增加,然后重新加载该页面。如果尝试加载当前页面之外的页面,会发出警告。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值