1. 程式人生 > >java簡單實現分頁查詢

java簡單實現分頁查詢

PreparedStatement

使用PreparedStatement可以較為簡單地實現分頁,涉及到三個函式
1.PreparedStatement.setMaxRows(int)這個函式設定一個當前的preparedStatement能取得的行的最大值,例如setMaxRows(20),那麼就只能取得1到20的資料,ResultSet.absolute(100)就錯了,雖然該查詢語句可以查到不止100條資料
2.ResultSet.absolute(int),將ResultSet的遊標移動到一個固定的行,例如,執行一次absolute(10)之後遊標指向第10行,再執行absolute(10)沒有改變,api中指出absolute(0)可以用,但是某些版本的mysql不能執行absolute(0),引數可以為負數,為負數的時候就加上resultset的size,例如absolute(-1)會到記錄的最後一條
3.ResultSet.relative(int)

,將ResultSet的遊標移動固定的行,例如,執行一次relative(10)之後遊標指向第10行,再執行relative(10)遊標指向第20行

limit

mysql 可以使用limit sql語句分頁,select * from table limit m,n;
選取從m(0開始)開始,長度為n的資料

程式碼

/**
     * @param page 獲取第幾頁
     * @param rows 每一頁獲取幾條資料
     * @param conn 資料庫連線
     */
    public static ResultSet pageWithAbsolute(int
page,int rows,Connection conn) throws SQLException { PreparedStatement pst=conn.prepareStatement("SELECT * FROM test "); pst.setMaxRows(page*rows);//設定為需要獲取的最後一個數據 ResultSet rs=pst.executeQuery(); rs.absolute((page-1)*rows);//設定為需要獲取的第一個資料 return rs; } /** * @param
page 獲取第幾頁 * @param rows 每一頁獲取幾條資料 * @param conn 資料庫連線 * */
public static ResultSet pageWithRelative(int page,int rows,Connection conn) throws SQLException { PreparedStatement pst=conn.prepareStatement("SELECT * FROM test "); pst.setMaxRows(page*rows);//設定為需要獲取的最後一個數據 ResultSet rs=pst.executeQuery(); rs.relative((page-1)*rows);//設定為需要獲取的第一個資料 return rs; } /** * @param page 獲取第幾頁 * @param rows 每一頁獲取幾條資料 * @param conn 資料庫連線 * */ public static ResultSet pageWithLimit(int page,int rows,Connection conn) throws SQLException { PreparedStatement pst=conn.prepareStatement("SELECT * FROM test limit ?,?"); pst.setInt(1,(page-1)*rows); pst.setInt(2,rows); ResultSet rs=pst.executeQuery(); return rs; }