常用數據庫中,實現分頁功能的查詢語句;


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語句不同


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM