java簡單實現分頁查詢
阿新 • • 發佈:2018-11-19
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;
}