zoukankan      html  css  js  c++  java
  • 常用数据库中,实现分页功能的查询语句;

    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,而rownum1不满足查询的结果,所以下一条记录的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语句不同

  • 相关阅读:
    css 如何让背景图片拉伸填充避免重复显示
    CDHtmlDialog 基本使用
    RES协议
    Sata win7 热插拔(AHCI)
    __argc和__argv变量
    MFC进度条刷新处理
    SVN强制注释
    自动build服务器 CruiseControl.NET
    opencv Mat 像素操作
    std::string 用法
  • 原文地址:https://www.cnblogs.com/AnswerTheQuestion/p/6262682.html
Copyright © 2011-2022 走看看