亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

Oracle下的Java分頁功能_動力節(jié)點Java學(xué)院整理

2024-08-29 14:00:27
字體:
供稿:網(wǎng)友

就如平時我們很在分頁中看到的,分頁的時候返回的不僅包括查詢的結(jié)果集(List),而且還包括總的頁數(shù)(pageNum)、當(dāng)前第幾頁(pageNo)等等信息,所以我們封裝一個查詢結(jié)果PageModel類,代碼如下:

package com.bjpowernode.test; import java.util.List; public class PageModel<E> {  private List<E> list;  private int pageNo;  private int pageSize;  private int totalNum;  private int totalPage;  public List<E> getList() {  return list;  }  public void setList(List<E> list) {  this.list = list;  }  public int getPageNo() {  return pageNo;  }  public void setPageNo(int pageNo) {  this.pageNo = pageNo;  }  public int getPageSize() {  return pageSize;  }  public void setPageSize(int pageSize) {  this.pageSize = pageSize;  }  public int getTotalNum() {  return totalNum;  }  public void setTotalNum(int totalNum) {  this.totalNum = totalNum;  setTotalPage((getTotalNum() % pageSize) == 0 ? (getTotalNum() / pageSize)   : (getTotalNum() / pageSize + 1));  }  public int getTotalPage() {  return totalPage;  }  public void setTotalPage(int totalPage) {  this.totalPage = totalPage;  }  // 獲取第一頁  public int getFirstPage() {  return 1;  }  // 獲取最后頁  public int getLastPage() {  return totalPage;  }  // 獲取前頁  public int getPrePage() {  if (pageNo > 1)   return pageNo - 1;  return 1;  }  // 獲取后頁  public int getBackPage() {  if (pageNo < totalPage)   return pageNo + 1;  return totalPage;  }  // 判斷'首頁'及‘前頁'是否可用  public String isPreable() {  if (pageNo == 1)   return "disabled";  return "";  }  // 判斷'尾頁'及‘下頁'是否可用  public String isBackable() {  if (pageNo == totalPage)   return "disabled";  return "";  } } 

  其中使用泛型是為了能使的該分頁類能進(jìn)行重用,比如在查詢用戶時可以封裝User對象、在查詢財務(wù)中的流向單時可以封裝流向單FlowCard類。 

  我們以查詢用戶為例,用戶選擇查詢條件,首先調(diào)用Servlet獲取查詢參數(shù),然后請求業(yè)務(wù)邏輯層取得分頁封裝結(jié)果類。業(yè)務(wù)邏輯調(diào)用Dao層取得結(jié)果集、取得中記錄數(shù)封裝成分頁類。最后Servlet將結(jié)果設(shè)置到j(luò)sp頁面顯示。

  首先來講解Servlet,代碼如下:

package com.bjpowernode.test; import java.io.*; import java.util.*; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import kane.UserInfo; import kane.UserInfoManage; import kane.PageModel; public class UserBasicSearchServlet extends HttpServlet {  private static final long serialVersionUID = 1L;  private int pageSize = 0;  @Override  public void init(ServletConfig config) throws ServletException {  pageSize = Integer.parseInt(config.getInitParameter("pageSize"));  }  @Override  protected void doGet(HttpServletRequest req, HttpServletResponse resp)   throws ServletException, IOException {  doPost(req, resp);  }  @Override  protected void doPost(HttpServletRequest req, HttpServletResponse resp)   throws ServletException, IOException {  // 1.取得頁面參數(shù)并構(gòu)造參數(shù)對象  int pageNo = Integer.parseInt(req.getParameter("pageNo"));  String sex = req.getParameter("gender");  String home = req.getParameter("newlocation");  String colleage = req.getParameter("colleage");  String comingyear = req.getParameter("ComingYear");  UserInfo u = new UserInfo();  u.setSex(sex);  u.setHome(home);  u.setColleage(colleage);  u.setCy(comingyear);  // 2.調(diào)用業(yè)務(wù)邏輯取得結(jié)果集  UserInfoManage userInfoManage = new UserInfoManage();  PageModel<UserInfo> pagination = userInfoManage.userBasicSearch(u,   pageNo, pageSize);  List<UserInfo> userList = pagination.getList();  // 3.封裝返回結(jié)果  StringBuffer resultXML = new StringBuffer();  try {   resultXML.append("<?xml version='1.0' encoding='gb18030'?>/n");   resultXML.append("<root>/n");   for (Iterator<UserInfo> iterator = userList.iterator(); iterator    .hasNext();) {   UserInfo userInfo = iterator.next();   resultXML.append("<data>/n");   resultXML.append("/t<id>" + userInfo.getId() + "</id>/n");   resultXML.append("/t<truename>" + userInfo.getTruename()    + "</ truename >/n");   resultXML.append("/t<sex>" + userInfo.getSex() + "</sex>/n");   resultXML.append("/t<home>" + userInfo.getHome() + "</home>/n");   resultXML.append("</data>/n");   }   resultXML.append("<pagination>/n");   resultXML.append("/t<total>" + pagination.getTotalPage()    + "</total>/n");   resultXML.append("/t<start>" + pagination.getFirstPage()    + "</start>/n");   resultXML.append("/t<end>" + pagination.getLastPage() + "</end>/n");   resultXML.append("/t<pageno>" + pagination.getPageNo()    + "</pageno>/n");   resultXML.append("</pagination>/n");   resultXML.append("</root>/n");  } catch (Exception e) {   e.printStackTrace();  }  writeResponse(req, resp, resultXML.toString());  }  public void writeResponse(HttpServletRequest request,   HttpServletResponse response, String result) throws IOException {  response.setContentType("text/xml");  response.setHeader("Cache-Control", "no-cache");  response.setHeader("Content-Type", "text/xml; charset=gb18030");  PrintWriter pw = response.getWriter();  pw.write(result);  pw.close();  } } 

其中User對象代碼如下:

package com.bjpowernode.test; import java.util.Date; public class UserInfo {  private int id;  private String username;  private String password;  private String truename;  private String sex;  private Date birthday;  private String home;  private String colleage;  private String comingYear;  public int getId() {  return id;  }  public void setId(int id) {  this.id = id;  }  public String getUsername() {  return username;  }  public void setUsername(String username) {  this.username = username;  }  public String getPassword() {  return password;  }  public void setPassword(String password) {  this.password = password;  }  public String getTruename() {  return truename;  }  public void setTruename(String truename) {  this.truename = truename;  }  public String getSex() {  return sex;  }  public void setSex(String sex) {  this.sex = sex;  }  public Date getBirthday() {  return birthday;  }  public void setBirthday(Date birthday) {  this.birthday = birthday;  }  public String getHome() {  return home;  }  public void setHome(String home) {  this.home = home;  }  public String getColleage() {  return colleage;  }  public void setColleage(String colleage) {  this.colleage = colleage;  }  public String getCy() {  return comingYear;  }  public void setCy(String cy) {  this. comingYear= cy;  } } 

接著是業(yè)務(wù)邏輯層代碼,代碼如下:

package com.bjpowernode.test; import java.sql.Connection; import kane.DBUtility; import kane.PageModel; public class UserInfoManage {  private UserInfoDao userInfoDao = null;  public UserInfoManage () {  userInfoDao = new UserInfoDao();  }  public PageModel<UserInfo> userBasicSearch(UserInfo u, int pageNo,   int pageSize) throws Exception {  Connection connection = null;  PageModel<UserInfo> pagination = new PageModel<UserInfo>();  try {   connection = DBUtility.getConnection();   DBUtility.setAutoCommit(connection, false);   pagination.setList(userInfoDao.getUserList(u, pageNo, pageSize));   pagination.setPageNo(pageNo);   pagination.setPageSize(pageSize);   pagination.setTotalNum(userInfoDao.getTotalNum(u));   DBUtility.commit(connection);  } catch (Exception e) {   DBUtility.rollBack(connection);   e.printStackTrace();   throw new Exception();  } finally {   DBUtility.closeConnection();  }  return pagination;  } } 

其中DBUtility為數(shù)據(jù)庫的連接封裝類。

最后是Dao層代碼實現(xiàn),代碼如下: 

package com.bjpowernode.test; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import kane.UserInfo; import kane.DBUtility; public class UserInfoDao {  public List<UserInfo> getUserList(UserInfo userInfo, int pageNo,   int pageSize) throws Exception {  PreparedStatement pstmt = null;  ResultSet rs = null;  List<UserInfo> userList = null;  try {   String sql = "select * from(select rownum num,u.* from(select * from user_info where sex = ? and home like '"    + userInfo.getHome()    + "%"    + "' and colleage like '"    + userInfo.getColleage()    + "%"    + "' and comingyear like '"    + userInfo.getCy()    + "%"    + "' order by id) u where rownum<=?) where num>=?";   userList = new ArrayList<UserInfo>();   Connection conn = DBUtility.getConnection();   pstmt = conn.prepareStatement(sql);   pstmt.setString(1, userInfo.getSex());   pstmt.setInt(2, pageNo * pageSize);   pstmt.setInt(3, (pageNo - 1) * pageSize + 1);   rs = pstmt.executeQuery();   while (rs.next()) {   UserInfo user = new UserInfo();   user.setId(rs.getInt("id"));   user.setTruename(rs.getString("truename"));   user.setSex(rs.getString("sex"));   user.setHome(rs.getString("home"));   userList.add(user);   }  } catch (SQLException e) {   e.printStackTrace();   throw new Exception(e);  } finally {   DBUtility.closeResultSet(rs);   DBUtility.closePreparedStatement(pstmt);  }  return userList;  }  public int getTotalNum(UserInfo userInfo) throws Exception {  PreparedStatement pstmt = null;  ResultSet rs = null;  int count = 0;  try {   String sql = "select count(*) from user_info where sex=? and home like '"    + userInfo.getHome()    + "%"    + "' and colleage like '"    + userInfo.getColleage()    + "%"    + "' and comingyear like '"    + userInfo.getCy()+ "%" + "'";   Connection conn = DBUtility.getConnection();   pstmt = conn.prepareStatement(sql);   pstmt.setString(1, userInfo.getSex());   rs = pstmt.executeQuery();   if (rs.next()) {   count = rs.getInt(1);   }  } catch (SQLException e) {   e.printStackTrace();   throw new Exception(e);  } finally {   DBUtility.closeResultSet(rs);   DBUtility.closePreparedStatement(pstmt);  }  return count;  } } 

最后就是servlet將得到的結(jié)果返回給jsp頁面顯示出來。

注:其中DBUtility代碼是封裝數(shù)據(jù)庫連接操作的代碼,如下:

1.package com.bjpowernode.test;    

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBUtility {  private static ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();  public static Connection getConnection() {  Connection conn = null;  conn = threadLocal.get();  if (conn == null) {   try {   Class.forName("oracle.jdbc.driver.OracleDriver");   conn = DriverManager.getConnection(    "jdbc:oracle:thin:@localhost:1521:oracle", "admin",    "admin");   threadLocal.set(conn);   } catch (ClassNotFoundException e) {   e.printStackTrace();   } catch (SQLException e) {   e.printStackTrace();   }  }  return conn;  }  // 封裝設(shè)置Connection自動提交  public static void setAutoCommit(Connection conn, Boolean flag) {  try {   conn.setAutoCommit(flag);  } catch (SQLException e) {   e.printStackTrace();  }  }  // 設(shè)置事務(wù)提交  public static void commit(Connection conn) {  try {   conn.commit();  } catch (SQLException e) {   e.printStackTrace();  }  }  // 封裝設(shè)置Connection回滾  public static void rollBack(Connection conn) {  try {   conn.rollback();  } catch (SQLException e) {   e.printStackTrace();  }  }  // 封裝關(guān)閉Connection、PreparedStatement、ResultSet的函數(shù)  public static void closeConnection() {  Connection conn = threadLocal.get();  try {   if (conn != null) {   conn.close();   conn = null;   threadLocal.remove();   }  } catch (SQLException e) {   e.printStackTrace();  }  }  public static void closePreparedStatement(PreparedStatement pstmt) {  try {   if (pstmt != null) {   pstmt.close();   pstmt = null;   }  } catch (SQLException e) {   e.printStackTrace();  }  }  public static void closeResultSet(ResultSet rs) {  try {   if (rs != null) {   rs.close();   rs = null;   }  } catch (SQLException e) {   e.printStackTrace();  }  } } 

使用ThreadLocal是為了保證事務(wù)的一致,使得同一個線程的所有數(shù)據(jù)庫操作使用同一個Connection。

到此一個簡單的代碼實現(xiàn)就完成了。

總結(jié)

以上所述是小編給大家介紹的Oracle下的Java分頁功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
91中文精品字幕在线视频| 国产精品嫩草影院久久久| 热re99久久国产精品| 欧美激情精品久久久久久| 91黑丝高跟在线| av在线免费播放网址| 一区二区三区中文免费| 成人欧美日韩| 久久99精品国产麻豆婷婷洗澡| 精品久久一区二区| 国产91一区二区三区| 日韩一区国产二区欧美三区| 成人涩涩小片视频日本| 亚洲欧美一区二区三区四区| 蜜桃免费网站一区二区三区| 亚洲 欧美 中文字幕| 三级网在线观看| 亚洲精品一区| 国产精品日韩精品欧美在线| 欧美人体做爰大胆视频| 高潮精品一区videoshd| 91在线看视频| www日本在线观看| 韩国三级午夜理伦三级三| 亚洲第一天堂| 午夜精品区一区二区三| 国产va免费精品观看精品视频| 亚洲免费影视第一页| 日韩一区二区免费看| 久久免费少妇高潮久久精品99| 亚洲国产高清不卡| 鲁鲁狠狠狠7777一区二区| 午夜精品剧场| 69视频在线播放| 国产亚洲人成网站| 91精品国产91久久综合桃花| 精品国产99久久久久久| 国产porn在线| 熟女熟妇伦久久影院毛片一区二区| 国产偷人爽久久久久久老妇app| www亚洲视频| 日本高清成人vr专区| 久久久久久久久久美女| 国模私拍视频在线观看| 啪啪av大全导航福利网址| 免费h在线看| 成人频在线观看| 欧美在线免费| 国产日韩欧美在线播放| 国产极品视频在线观看| 91黄色免费视频| 天海翼视频在线观看| 一本久道久久综合| 国产美女精品在线观看| 日产精品一线二线三线芒果| a级大片免费看| 97人妻精品一区二区三区免费| 粉嫩久久久久久久极品| 大陆av在线播放| 美丽的小蜜桃4春潮| 91香蕉视频mp4| 国产suv精品一区二区33| 国产欧美日韩第一页| 在线黄色免费看| 秋霞午夜在线观看| 一区二区日韩视频| 国产一区在线观| 精品三级久久久久久久电影聊斋| aa国产成人| 欧美不卡视频一区发布| 亚洲毛片欧洲毛片国产一品色| 91老司机福利在线| 精品国产乱码久久久久久1区2区| 欧美亚洲国产视频小说| 免费人成黄页网站在线一区二区| 在线看视频你懂的| eeuss性xxxxxx电影| 九色porny丨首页入口在线| 成人动漫视频在线观看免费| 亚洲av无码成人精品区| 五月亚洲婷婷| 人妻无码中文久久久久专区| 国内揄拍国内精品久久| 欧美高清一级片在线观看| 亚洲天堂网站在线观看视频| 久久久久久久久久久91| 国产99免费视频| 国产女主播在线| 精品一区二区三区的国产在线播放| 免费日本一区二区三区视频| 欧美日韩亚洲天堂| 精品剧情在线观看| 欧美色图第二页| 狠狠色狠狠色综合婷婷tag| 欧美成年人视频网站| 老司机精品视频在线播放| 国产一区二区三区精品在线观看| 国产在线精品一区二区| 岳乳丰满一区二区三区| 国产欧美一区二区精品性色| 国产精品十八以下禁看| 中文字幕日韩电影| 免费av观看网站| 亚洲少妇第一页| 在线观看欧美黄色| 亚洲欧美日韩小说| www.麻豆av| 日本伦理一区二区三区| 国产伦精品一区二区三区免| 国产天堂在线播放视频| 国产精品久久久爽爽爽麻豆色哟哟| 蜜桃久久影院| 色视频www在线播放国产人成| 91精品国产乱码久久久久久久| 欧美91视频| 天天想你在线观看完整版电影免费| 午夜精品网站| 岛国视频一区免费观看| 91电影在线| 成人免费在线电影网| 中国1级黄色片| 添女人荫蒂视频| 亚洲精品免费在线播放| 亚洲黄色尤物视频| 成人黄视频免费| 国产亚洲一卡2卡3卡4卡新区| 色妞色视频一区二区三区四区| 精品国产视频| 91视频啊啊啊| 在线免费观看av网站| 免费yellow网站| 天天色天天爱天天射综合| 可以看毛片的网址| 国产亚洲视频在线观看| 97不卡在线视频| 欧美一区二区三区少妇| 国产精品www.| avtt天堂资源网| 一区二区三区在线观看免费| jlzzjlzz亚洲日本少妇| 在线不卡中文字幕播放| 国产精品美女免费看| 色老头久久综合| 2018中文字幕在线观看| 欧区一欧区二欧区三| 一级黄色a毛片| 久草成色在线| 奇米777欧美一区二区| 亚洲视频色图| 免费a级人成a大片在线观看| 天堂在线精品视频| 亚洲精品在线观看视频| 国产精品久久一区二区三区| 亚洲经典一区二区| 天堂在线精品| 国产精品视频一二三| 亚洲国产精品人人爽夜夜爽| 男女视频在线观看网站| 国产在线精品观看| 综合操久久久| 亚洲欧美中文另类| 欧美精品v日韩精品v韩国精品v| 精品免费囯产一区二区三区| 久久99热只有频精品91密拍| 免费高清视频在线观看| 亚洲成年人视频| 国产高清精品二区| 免费国产成人看片在线| 欧美一区 二区| **性色生活片久久毛片| 成人动漫网站在线观看| 性一交一乱一透一a级| 噜噜噜91成人网| 久久免费成人精品视频| 免费99精品国产自在在线| 一级日本免费的| 韩国18福利视频免费观看| 欧美精品一区二区三区蜜桃| 国产亚洲一区二区手机在线观看| 欧美多人爱爱视频网站| 在线观看成人毛片| 成人在线观看视频网站| 欧美激情18p| 成人免费在线观看视频| 国产绳艺sm调教室论坛| 国产91亚洲精品一区二区三区| 97av在线影院| 日本精品在线中文字幕| 国产chinesehd精品露脸| 精品一区二区三区毛片| 又黄又免费的网站| 偷拍自拍一区| 国产不卡一区二区在线播放| 天堂一区在线观看| 欧美日韩精品综合| 欧美日韩精品免费观看视频完整| 亚洲国产又黄又爽女人高潮的| 日本一区二区网站| 三级在线观看视频| 久久久久久久久久久久久91| 97蝌蚪自拍自窝| 成人xvideos免费视频| 国产精品自产拍在线网站| 国产福利拍拍拍| 免费黄色av网址| 三妻四妾完整版在线观看电视剧| 91成人在线视频| 久久久精品午夜少妇| 成人涩涩免费视频| 精品国产美女福利到在线不卡| 伊人久久综合网另类网站| 国模精品一区二区三区| 国产69精品久久久久孕妇| 性感av在线播放| 欧美人动性xxxxz0oz| 国产三级精品在线| 欧美高清自拍一区| 国产精品99久久久久久白浆小说| 国产精品久久久久久吹潮| 亲爱的老师9免费观看全集电视剧| 欧美日韩激情一区二区| 日韩在线观看免| 欧美视频www| 91精品国产99久久久久久| xxx在线播放| 中文字幕视频观看| 一区二区中文视频| 久久久三级国产网站| 欧美中文字幕在线观看视频| 日韩成人av免费| 图片一区二区| 欧美影院在线播放| 中文字幕一区二区三区四区不卡| 免费福利在线观看| 欧美日韩国产精品一区二区亚洲| 国产精品51麻豆cm传媒| 中文字幕成人精品久久不卡| 久久综合色播五月| 亚洲国产精品一区制服丝袜| caoporen国产精品| 久久久久久久久国产一区| 欧美不卡在线视频| 亚洲日本在线a| 九九九热视频| 蜜桃视频中文字幕| 国产精品一区在线免费观看| 女同久久另类69精品国产| 国产乱码精品一品二品| 久久视频免费观看| 日韩和欧美一区二区三区| 97在线看福利| 精品国产精品久久一区免费式| 欧美日韩一级在线| 中文字幕av一区二区三区高| 国产99久久久久| 久久久www免费人成黑人精品| 欧美一区二区三区四区在线观看地址| 欧美成人一区二免费视频软件| 日韩视频一二三| 亚洲一区二区三区成人在线视频精品| 欧美一级大片免费看| 欧美在线观看日本一区| 国产在线一区二区三区播放| 在线观看免费高清完整| 日韩特黄一级片| 高清国产mv在线观看| 一级全黄裸体片| 一区二区三区视频在线播放| 女尊高h男高潮呻吟| 亚洲老头老太hd| 久久久久一区二区三区| 成人综合视频在线| 欧美图片激情小说| 国产乱码久久久久久| 男人草女人视频| 欧美黑人粗大| 国产精品久久久久久久久久齐齐| 日韩免费观看一区二区| 尤物视频网站在线观看| 中文乱码人妻一区二区三区视频| 久久av一区二区三区亚洲| 亚洲一区第一页| 精品福利在线观看| 久久丝袜视频| 人妖欧美1区| 日本不卡免费一区| 少妇高潮惨叫久久久久| 男生操女生视频在线观看| 亚洲大胆在线| 综合亚洲深深色噜噜狠狠网站| 97超碰资源站在线观看| 电影av在线| 亚洲欧美综合v| 成人写真视频福利网| 男女交配网站| 韩国成人漫画| 国产精品乱码久久久| 精品少妇一区二区30p| 毛片网站在线免费观看| 成人免费无遮挡无码黄漫视频| 在线国产精品一区| 国产精品21p| 欧美精品一区二区三区在线看午夜| 一个人看的www日本高清视频| 国产乱码精品一区二区三| 日韩激情电影| 亚洲美女在线看| 国产在线拍揄自揄视频不卡99| 高清不卡一区二区三区| 少妇高潮 亚洲精品| 欧美日韩在线精品一区二区三区激情综合| 亚洲天天影视| 中文字幕日韩欧美精品在线观看| 日韩在线观看电影完整版高清免费悬疑悬疑| 高清无码一区二区在线观看吞精| 能看的毛片网站| 日韩一级精品视频在线观看| 永久免费看mv网站入口78| 91视频网页| 欧美黑人性受xxxx喷水| 蘑菇福利视频一区播放| 亚洲综合一二三区| 国产绳艺sm调教室论坛| 欧美一级久久久久久久久大| 欧美va亚洲va| 国产精品日韩一区| 亚洲成色在线综合网站2018站| 亚洲激情久久久|