日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲

發布時間:2023/12/20 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、了解數據庫指令

Oracle數據庫相對于MySQL數據庫來說,要實現分頁查看,Oracle中沒有像MySQL里的limit命令,使用的Oracle語句也比較復雜

select * from (select rownum r,e. * from 要分頁的表 e where rownum<=m*n) t where r>m*n-m ;

注:要分頁的表 后面的e:是給表取的別名

rownum ?r為行的別名

例如:

select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 ) t2) where rn>=1 and rn<=4

利用這樣類似的數據庫操作命令,我們來實現分頁(分頁最主要的幾個元素是,頁面的大小和當前的頁碼

頁面大小:我們可以根據前端顯示效果自定義大小

當前頁碼:這個元素我們不能像MySQL指令一樣,mysql指定行索引和頁面的大小,就可以查詢你從你指定行開始,查詢到指定大小的數據。

如圖所示:

而Oracle運用上述語句執行結果如圖所示,根據下面圖可以看出,(第一個參數rn也是行索引,后面的參數約束也是行索引,查詢到的數據條數就和MySQL就有出路 。)

①Oracle:根據簡單的換算,看下面的表達式換算可以得出你你想要的的分頁查詢

select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 order by id) t2) where rn>? and rn<=?

第一個參數:頁碼=? (pageNumber-1)*pageSize

第二個參數:頁的大小=pageSize*pageNumber(有最后索引減前一個索引獲得頁面的大小)

②MySql:根據簡單的計算看下面的表達式換算可以得出你你想要的的分頁查詢

String sql = "select id,stuId,stuName,score from stu limit ?,?";

第一個參數:頁碼=pageNumber-1)*pageSize

第二個參數:頁的大小=pageSize(直接指定大小)

二、從數據庫獲取數據(dao層方法)

public ArrayListturnPageD(int pageNumber, int pageSize) {

ArrayListlist = new ArrayList<>();

User u = null;

Connection conn = null;

ResultSet resultSet = null;

PreparedStatement statement = null;

try {

conn = DbUtil.getConnection();//鏈接數據庫

/*oracle 不支持分頁limit命令*/

String sql = "select * from (select t2.*,rownum rn from (select t1.* from tb1_user t1 order by id) t2) where rn>? and rn<=?";

statement = conn.prepareStatement(sql);

statement.setInt(1,(pageNumber-1)*pageSize);

statement.setInt(2, pageSize*pageNumber);

resultSet = statement.executeQuery();

if (resultSet != null) {

while (resultSet.next()) {

u = new User();

u.setId(resultSet.getInt(1));

u.setUserCode(resultSet.getString(2));

u.setUserName(resultSet.getString(3));

u.setUserPassword(resultSet.getString(4));

u.setGender(resultSet.getInt(5));

u.setBirthday(resultSet.getDate("birthday"));

u.setPhone(resultSet.getString(7));

u.setAddress(resultSet.getString(8));

u.setCreateBy(resultSet.getInt(9));

u.setCreationDate(resultSet.getDate("creationDate"));

u.setModifyBy(resultSet.getInt(11));

u.setModifyDate(resultSet.getDate("modifyDate"));

u.setUserRole(resultSet.getInt("userRole"));

list.add(u);

}

System.out.println("添加數據成功!!");

}

} catch (SQLException e) {

System.out.println("查看數據失敗!!");

e.printStackTrace();

} finally {

try {

statement.close();

conn.close();

resultSet.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

return list;

}

三、將獲取的數據渲染到界面(控制層)

jsp頁碼控制

顯示效果為:共xx碼? ? ??? 首頁? ? 上一頁 下一頁? ?尾頁

利用EL表達式來處理:

首頁:1

上一頁為 :${requestScope.curPage<=1?1:requestScope.curPage-1}

利用三目運算符 如果點擊上一頁面時,頁碼數小于等于1,就跳轉到首頁,否知頁碼數減一: 下一頁也如此。

共${requestScope.recordCount}條記錄?? ${requestScope.curPage}/${requestScope.param} ? 頁

首頁

上一頁

下一頁

最后一頁

控制層是直接關聯的jsp頁面顯示的,分頁時,我們需要自定義頁面的大小,真正關心的是頁碼。

對于分頁顯示而言,首先點擊查看數據是我們就已經分好頁。對于這個操作,我們點擊時就從前臺發送了一個servlet請求,請求獲取頁面的的數據,而我們的頁碼是根據前端頁面,點擊上一頁、下一頁獲取而來的。這就會導致一個問題,第一次獲取來的頁碼參數為空(req.getParameter("page")==null),因此要做空的判斷,然后自定義頁面數據(?list = userService.turnPageS(1,8);),而從第二次請求而言:page值就不為空了。這樣分頁顯示就完成了。

if(method.equals("select")){

Listlist = userService.selectAllUserS();

int recordCount = list.size();/*獲取記錄條數*/

req.setAttribute("param",recordCount/8+1);/*記錄頁數為:記錄總數/頁面顯示記數

*+1將記錄條數發送給頁面*/

req.setAttribute("recordCount",recordCount);

int page = 1;

if(req.getParameter("page")==null){ //首次訪問時不能獲取頁碼

list = userService.turnPageS(1,8); //首次訪問將page值置為1 默認顯示首頁

}else{

page = Integer.parseInt(req.getParameter("page"));//獲取接下來的當前頁碼

list = userService.turnPageS(page,8);

}

req.setAttribute("listUser",list);

req.setAttribute("curPage",page);//首次訪問時將頁碼1傳送給前端頁面

System.out.println("curpage:"+page);

req.getRequestDispatcher("admin/userlist.jsp").forward(req, resp);

}

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的javaweb分页查询oracle,JavaWeb项目 利用Oracle数据库实现分页查看细讲的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。