Oracle中Java分页功能有哪些
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,小编给大家分享一下Oracle中Java分页功能有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!就如平时我们很在分页中
千家信息网最后更新 2025年01月27日Oracle中Java分页功能有哪些
小编给大家分享一下Oracle中Java分页功能有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pageNum)、当前第几页(pageNo)等等信息,所以我们封装一个查询结果PageModel类,代码如下:
package com.bjpowernode.test; import java.util.List; public class PageModel{ private List list; private int pageNo; private int pageSize; private int totalNum; private int totalPage; public List getList() { return list; } public void setList(List 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(); PageModelpagination = userInfoManage.userBasicSearch(u, pageNo, pageSize); List userList = pagination.getList(); // 3.封装返回结果 StringBuffer resultXML = new StringBuffer(); try { resultXML.append("/n"); resultXML.append(" /n"); for (Iterator /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(); } }iterator = userList.iterator(); iterator .hasNext();) { UserInfo userInfo = iterator.next(); resultXML.append("/n"); resultXML.append("/t " + userInfo.getId() + " /n"); resultXML.append("/t" + userInfo.getTruename() + " truename >/n"); resultXML.append("/t /n"); } resultXML.append("" + userInfo.getSex() + " /n"); resultXML.append("/t" + userInfo.getHome() + " /n"); resultXML.append("/n"); resultXML.append("/t /n"); resultXML.append("" + pagination.getTotalPage() + " /n"); resultXML.append("/t" + pagination.getFirstPage() + " /n"); resultXML.append("/t" + pagination.getLastPage() + " /n"); resultXML.append("/t" + pagination.getPageNo() + " /n"); resultXML.append("
其中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 PageModeluserBasicSearch(UserInfo u, int pageNo, int pageSize) throws Exception { Connection connection = null; PageModel pagination = new PageModel (); 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 ListgetUserList(UserInfo userInfo, int pageNo, int pageSize) throws Exception { PreparedStatement pstmt = null; ResultSet rs = null; List 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 (); 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 ThreadLocalthreadLocal = new ThreadLocal (); 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分页功能有哪些"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
封装
代码
结果
查询
业务
逻辑
参数
对象
数据
数据库
用户
篇文章
页面
功能
事务
内容
一致
不怎么
信息
函数
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络安全三无七边具体包括哪些
ns连接服务器没有响应
手机应用软件开发流程
彩虹六号异种怎么选择服务器
靠谱的软件开发系统
数据库脚本怎样
电商项目数据库代码
数据库的修复工具有哪些
服务器安装瑞星杀毒软
pcb软件开发流程
助道长的捏脸数据库
杭州银行子公司软件开发
服务器不支持硬盘启动
杨浦区品牌软件开发诚信经营
广西爱团互联网科技有公司
深圳蓝叶软件开发
技术侦察和网络安全
领域数据的数据库集成系统
美国便宜服务器租用
戴尔t20服务器开关闪烁
服务器主机能组群晖么
h3c服务器设置u盘启动
网络安全开展两学两保
动漫制作网络技术
基因武器数据库
网络安全赛道未来市场
分布式节点数据一致性是数据库吗
数据库中的分组语句
网络安全行业真实收入
如何用远程桌面管理服务器