常用数据库中,实现分页功能的查询语句;

1.Mysql数据库

select * from 表名  limit  (pagenum-1)*pagesize, pagesize;

pagenum是当前第几页,pagesize是每页的条数。

那么(pagenum-1)*pagesize就表示翻过 这些条数,接着显示 pagesize  条。

实例如下:

package com.inba.maya.DBConnection;

import java.util.*;
import java.sql.*;
import com.inba.maya.page.*;
public class FruitDao {
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;

    public FruitDao() throws Exception{
        conn=DBConnection.GetConnection();
    }

    //这个方法是用来获取总页数的,与下面的获取每页内容没有联系。
    public int getPage(int pagesize) throws Exception{
        //用coun(*)获取当前表的条数,注意返回的只有一行数据,并且是整数;
        String sql="select count(*) from Fruit";
        ps=conn.prepareStatement(sql);
        rs=ps.executeQuery();
        //那么rs.next()必然会指向下一个
        rs.next();
        //因为整数除整数必然是个整数,所以要乘以1.0变成小数,然后用Math.ceil获取 大于或者等于 当前数的 最小整数值;
        int pageCount=(int)Math.ceil(1.0*rs.getInt(1)/pagesize);
        return pageCount;
    }

    //输入两个参数,pagenum是第几页;pagesize是每页的行数
    public ArrayList<Fruit> Select(int pagenum, int pagesize) throws Exception{
        //定义一个当前要获取的类的类型的数组;
        ArrayList<Fruit> list=new ArrayList<Fruit>();
        //mysql的分页语句;
        String sql="select * from Fruit limit ?,?";
        ps=conn.prepareStatement(sql);
        ps.setInt(1, (pagenum-1)*pagesize);
        ps.setInt(2, pagesize);
        rs=ps.executeQuery();
        //如果rs.next是true,首先把要赋值的类实例化,那么通过while循环将每个字段元素赋值到相应的类的变量中,
        while(rs.next()){
            Fruit f=new Fruit();
            f.setIds(rs.getString(1));
            f.setName(rs.getString(2));
            f.setPrice(rs.getDouble(3));
            f.setNumbers(rs.getInt(5));
            f.setSource(rs.getString(4));
            f.setImages(rs.getString(6));

            //把每次循环f的值,都存放到数组list中;
            list.add(f);
        }
        //最后返回出去
        return list;
    }
}

2.Orcale数据库

首先说一下:在Oracle中用于分页显示的sql语句关键词:rownum。

可能都知道rownum只适用于小于或小于等于,如果进行等于判断,那么只能等于1,不能进行大于的比较。

rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推。

rownum总是从1开始,不管当前的记录是否满足查询结果,rownum返回的值都是1,如果这条记录的值最终满足所有的条件,那么rownum会递加,下一条记录的rownum会返回2,否则下一条记录的rownum仍然返回1。

理解了这一点,就清楚为什么一般的rownum大于某个值或等于某个不为1的值是无法返回结果的,因此对于每条记录的rownum都是1,而rownum为1不满足查询的结果,所以下一条记录的rownum不会递增,仍然是1,因此所有的记录都不满足条件。

简单例子:select * from student rownum<=4

那么就表示显示student中的返回编号小于等于4的行;

简单sql语句:

pagenum:是当前页数; pagesize:是每页的行数;

select * from (select a.*, rownum ro from (select * from COUSER) a) where ro between (pagenum-1)*pagesize+1 and (pagenum-1)*pagesize+pagesize

实例:

package com.inba.maya.Dao;
import java.util.*;
import java.sql.*;
public class DBConnection {

       //oracle加载驱动
    public static String qd="oracle.jdbc.driver.OracleDriver";
       //oracle链接数据库
    public static String url="jdbc:oracle:thin:@localhost:1521:ORCL";
    public static String user="gmh";
    public static String password="602477126";

    public static Connection GetConnection() throws Exception{
        Class.forName(qd);
        Connection conn=DriverManager.getConnection(url, user, password);
        return conn;
    }
}
package com.inba.maya.Dao;

import java.util.*;
import java.sql.*;
import com.inba.maya.Dao.*;
import com.inba.maya.page.*;

public class CouserDao {
    private Connection conn;
    private PreparedStatement ps;
    private ResultSet rs;

    public CouserDao() throws Exception{
        conn=DBConnection.GetConnection();
    }

    public int GetPage(int pagesize) throws Exception{
        String sql="select count(*) from COUSER";
        ps=conn.prepareStatement(sql);
        rs=ps.executeQuery();
        rs.next();
        int page=(int)Math.ceil(1.0*rs.getInt(1)/pagesize);
        return page;
    }
    public ArrayList<Couser> Select(int pagesize, int pagenum) throws SQLException{
        ArrayList<Couser> list=new ArrayList<Couser>();

        //oracle的分页语句
        String sql="select * from (select a.*, rownum ro from (select * from COUSER) a) where ro between ? and ?";
        ps=conn.prepareStatement(sql);
        ps.setInt(1, (pagenum-1)*pagesize+1);
        ps.setInt(2, (pagenum-1)*pagesize+pagesize);
        rs=ps.executeQuery();
        while(rs.next()){
            Couser f=new Couser();
            f.setCon(rs.getString(1));
            f.setCname(rs.getString(2));
            f.setTon(rs.getString(3));

            list.add(f);
        }
        return list;
    }

}

在链接各类数据库中,不一样的无非,加载驱动、连接数据库、sql语句的不同。

3.sqlserver语句实现分页:

select top 10 * from 表名 where not in (select top 20 * from 表名 )

由于电脑中没有装载sqlserver,所有就不演示了。

其实对于数据库的操作,大都大同小异,无非就是加载驱动包、连接数据库、sql语句不同

时间: 2024-12-22 15:45:43

常用数据库中,实现分页功能的查询语句;的相关文章

怎样从生产数据库中获得想要的查询语句,把结果集批量插入到磁盘txt文件中

第一步:建立存储过程       实现传入参数,生成结果到磁盘的txt文件中: USE [XXXXX] GO /****** Object:  StoredProcedure [dbo].[Proc_sql_to_file]    Script Date: 2018/5/13 15:47:10 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ==========================================

mysql记录集中记录序号,MySQL中实现rownum功能类似的语句(转)

MySQL 如何实现 Oracle 的 ROWNUM mysql> SELECT * FROM frutas;+-----------+----------+| nombre    | color    |+-----------+----------+| fresa     | rojo     || platano   | amarillo || manzana   | verde    || uva       | verde    || pera      | verde    || m

JDBC使用数据库来完成分页功能

本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实现,而这里我们采用的是操作数据库的方式,而且在这种方式中,最重要的是带限制条件的查询SQL语句: select name from user limit m,n 其中m与n为数字.n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始),例如我们想从user表中先获取前五行数据项(1-5)的na

Oracle数据库中的分页--rownum

1. 介绍 当我们在做查询时,经常会遇到如查询限定行数或分页查询的需求,MySQL中可以使用LIMIT子句完成,在MSSQL中可以使用TOP子句完成,那么在Oracle中,我们如何实现呢? Oracle提供了一个rownum的伪列,它会根据返回记录生成一个序列化的数字. rownum和rowid都是伪列,但是两者的根本是不同的.rownum是根据SQL查询出的结果给每行分配一个逻辑编号,所以SQL不同也就会导致最终rownum不同:rowid是物理结构上的,在每条记录INSERT到数据库中时,都

django中orm分页功能(内置分页)

分批获取数据的方法 数据库方法 models.Uinfo.objects.all()[10:20] django自带的方法 创建一个新的url urlpatterns = [ url(r'^index.html/', views.index), ] 创建index函数 def index(request): """ 分页功能 :param request: :return: """ user_list = models.Uinfo.objects

JAVA对数据库进行操作,实现数据库中数据的插入,查询,更改,删除操作

(—)通过mysql workbench 创建一个数据库,在这里命名为company,然后建一个tb_employee表 (二)以下是java代码对表tb_employee的操作 1 创建一个Employee类,包括员工的一些信息,如  id  name age sex 2创建DatabaseConnection类,用于数据库的连接 3创建一个EmployeeOperation类,用于操作数据库,它里面包括了 以下方法 (1)getInstance()   //返回EmployeeOperati

PHP中对mysql预编译查询语句的一个封装

原文地址:http://chen-shan.net/?p=474 为了防止sql注入,我们都使用过mysqli这个类,但是每次都需要绑定参数,绑定结果等,比较麻烦,所以可以把这些重复的语句封装成一个函数. 一.封装前. 传统的一个预编译方式的”select”查询代码: $id = "1"; $name = "test_name"; $db_obj = new mysqli("localhost", "db_user", &qu

数据库-Oracle通过执行计划查看查询语句是否使用索引【转】

1.生成执行计划 explain plan for select * from t_call_records where t_bjhm='123456' 备注:explain plan for后面为要生成执行计划的查询语句 2.查看执行计划结果 select * from table(dbms_xplan.display) 如上图所示,TABLE ACCESS FULL为全表扫描; 为t_bjhm列加上索引后生成执行计划并查看结果: 如上图所示,index range scan为索引范围扫描;

数据库中两个表同时执行语句

数据库中同时删除两个表的某一条内容 'DELETE 表1,表2 from 表1 LEFT JOIN 表2 ON 表2.列名=表1.列名 WHERE 表2.number='列名'';同时在两个表中添加某一条内容,声明两个变量装载数据库语句: var str='INSERT INTO 表1(列名) VALUES(添加的内容)';var str_time='INSERT INTO 表2 (列名) VALUES(添加的内容)';connection.query(str,function(error,da