iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >Oracle中Java分页功能有哪些
  • 333
分享到

Oracle中Java分页功能有哪些

2024-04-02 19:04:59 333人浏览 八月长安
摘要

小编给大家分享一下oracle中Java分页功能有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!就如平时我们很在分页中看到的

小编给大家分享一下oracle中Java分页功能有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pageNum)、当前第几页(pageNo)等等信息,所以我们封装一个查询结果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 ""; 
 } 
}

  其中使用泛型是为了能使的该分页类能进行重用,比如在查询用户时可以封装User对象、在查询财务中的流向单时可以封装流向单FlowCard类。 

  我们以查询用户为例,用户选择查询条件,首先调用Servlet获取查询参数,然后请求业务逻辑层取得分页封装结果类。业务逻辑调用Dao层取得结果集、取得中记录数封装成分页类。最后Servlet将结果设置到jsp页面显示。

  首先来讲解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.取得页面参数并构造参数对象 
 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.调用业务逻辑取得结果集 
 UserInfoManage userInfoManage = new UserInfoManage(); 
 PageModel<UserInfo> pagination = userInfoManage.userBasicSearch(u, 
  pageNo, pageSize); 
 List<UserInfo> userList = pagination.getList(); 
 // 3.封装返回结果 
 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; 
 } 
}

接着是业务逻辑层代码,代码如下:

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为数据库的连接封装类。

最后是Dao层代码实现,代码如下: 

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将得到的结果返回给jsp页面显示出来。

注:其中DBUtility代码是封装数据库连接操作的代码,如下:

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; 
 } 
 // 封装设置Connection自动提交 
 public static void setAutoCommit(Connection conn, Boolean flag) { 
 try { 
  conn.setAutoCommit(flag); 
 } catch (SQLException e) { 
  e.printStackTrace(); 
 } 
 } 
 // 设置事务提交 
 public static void commit(Connection conn) { 
 try { 
  conn.commit(); 
 } catch (SQLException e) { 
  e.printStackTrace(); 
 } 
 } 
 // 封装设置Connection回滚 
 public static void rollBack(Connection conn) { 
 try { 
  conn.rollback(); 
 } catch (SQLException e) { 
  e.printStackTrace(); 
 } 
 } 
 // 封装关闭Connection、PreparedStatement、ResultSet的函数 
 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是为了保证事务的一致,使得同一个线程的所有数据库操作使用同一个Connection。

以上是“Oracle中Java分页功能有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网数据库频道!

您可能感兴趣的文档:

--结束END--

本文标题: Oracle中Java分页功能有哪些

本文链接: https://www.lsjlt.com/news/57065.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Oracle中Java分页功能有哪些
    小编给大家分享一下Oracle中Java分页功能有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!就如平时我们很在分页中看到的...
    99+
    2022-10-18
  • java分页功能实现的方法有哪些
    实现Java分页功能的方法有以下几种:1. 使用数据库的分页查询功能:在SQL语句中使用LIMIT和OFFSET子句来限制查询结果的...
    99+
    2023-09-27
    java
  • oracle分页和mysql分页有哪些区别
    本篇内容介绍了“oracle分页和mysql分页有哪些区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!区...
    99+
    2022-10-19
  • php实现分页功能的方法有哪些
    在PHP中,实现分页功能的方法有以下几种:1. 使用MySQL的LIMIT语句:可以通过在SQL查询中使用LIMIT语句来限制查询结...
    99+
    2023-08-14
    php
  • java中final的功能有哪些
    在Java中,final关键字有以下功能:1. 声明一个不可变的变量:当使用final关键字声明一个变量时,该变量的值不能被改变。一...
    99+
    2023-09-04
    java final
  • DataInputStream在Java 中的功能有哪些
    今天就跟大家聊聊有关DataInputStream在Java 中的功能有哪些 ,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。DataInputStream 介绍DataInputSt...
    99+
    2023-05-31
    java datainputstream npu
  • java中List分页的方法有哪些
    本篇内容介绍了“java中List分页的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.根据入参带分页参数进行sql查询分页&n...
    99+
    2023-06-21
  • Java O2OA V4.12.26有哪些功能
    这篇文章主要介绍“Java O2OA V4.12.26有哪些功能”,在日常操作中,相信很多人在Java O2OA V4.12.26有哪些功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java O2OA V...
    99+
    2023-06-02
  • Java O2OA V4.1660有哪些功能
    今天小编给大家分享一下Java O2OA V4.1660有哪些功能的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。O2OA是基...
    99+
    2023-06-04
  • Oracle触发器的功能有哪些
    Oracle触发器的功能有以下几个:1. 数据完整性约束:通过触发器可以对插入、更新或删除操作进行约束,确保数据的完整性。例如,可以...
    99+
    2023-10-08
    Oracle
  • Oracle VPD的相关功能有哪些
    这篇文章主要讲解了“Oracle VPD的相关功能有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle VPD的相关功能有哪些”吧!测试用的数据表使用Oracle的示例Schem...
    99+
    2023-05-31
  • Java 的fastjson1.1.32有哪些新功能
    这篇文章主要介绍“Java 的fastjson1.1.32有哪些新功能”,在日常操作中,相信很多人在Java 的fastjson1.1.32有哪些新功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java ...
    99+
    2023-06-17
  • Java坑爹的功能有哪些
    本篇内容介绍了“Java坑爹的功能有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、switch必须加上break才结束对于多重分支选...
    99+
    2023-06-16
  • java分页的优缺点有哪些
    Java分页的优点有:1. 实现简单:Java提供了丰富的分页功能,并且有很多现成的分页框架可以使用,开发者只需简单调用即可实现分页...
    99+
    2023-09-16
    java
  • Java中Elasticsearch实现分页的方法有哪些
    这篇文章主要介绍“Java中Elasticsearch实现分页的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java中Elasticsearch实现分页的方法有哪些”文章能帮助大家解决问...
    99+
    2023-07-02
  • Java中有哪些性能分析工具
    今天就跟大家聊聊有关Java中有哪些性能分析工具,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。VisualVMVisualVM是一个资源分析工具,一直从JDK 6更新到7。它默认内存...
    99+
    2023-06-17
  • 小程序分销功能有哪些
    这篇文章主要为大家展示了“小程序分销功能有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“小程序分销功能有哪些”这篇文章吧。一,根据嵌入在手机微信中的基本流量合理使用嵌入的流量导入,并充分利用...
    99+
    2023-06-27
  • JAVA O2OA V4 Build 12.16有哪些功能
    这篇文章主要介绍了JAVA  O2OA V4 Build 12.16有哪些功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JAVA  O2OA V4 Build 12.16有哪些功能文章都...
    99+
    2023-06-04
  • Java定时器的功能有哪些
    Java定时器的功能有以下几种:1. 定时执行任务:可以在一定时间间隔内重复执行某个任务,例如每隔一段时间就发送一次心跳包。2. 延...
    99+
    2023-09-11
    Java
  • java分页实现的方法有哪些
    Java分页的实现方法主要有以下几种:1. 使用数据库的分页查询功能:可以使用SQL语句中的LIMIT和OFFSET关键字来实现分页...
    99+
    2023-10-12
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作