Oracle下的Java分页功能_动力节点Java学院整理
发布时间 - 2026-01-11 02:46:43 点击率:次就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(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分页功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# oracle
# 下的java分页
# java web手写实现分页功能
# Java List分页功能实现代码实例
# java ssm框架实现分页功能的示例代码(oracle)
# Java实现简单的分页功能
# javabean servlet jsp实现分页功能代码解析
# 举例详解用Java实现web分页功能的方法
# Java简单高效实现分页功能
# 分页
# 前页
# 小编
# 后页
# 是为了
# 在此
# 给大家
# 尾页
# 为例
# 能使
# 到此
# 就如
# 首页
# 下页
# 第一页
# 如在
# 所述
# 查询结果
# 给我留言
# 感谢大家
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用模型观察者?(Observer代码示例)
javascript中的try catch异常捕获机制用法分析
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
如何快速建站并高效导出源代码?
如何实现javascript表单验证_正则表达式有哪些实用技巧
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
Bootstrap整体框架之JavaScript插件架构
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel怎么实现验证码(Captcha)功能
Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel如何使用Sanctum进行API认证?(SPA实战)
如何快速上传自定义模板至建站之星?
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
EditPlus 正则表达式 实战(3)
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何在Windows服务器上快速搭建网站?
JavaScript中的标签模板是什么_它如何扩展字符串功能
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
微信小程序 配置文件详细介绍
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】
Laravel怎么调用外部API_Laravel Http Client客户端使用
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
装修招标网站设计制作流程,装修招标流程?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
phpredis提高消息队列的实时性方法(推荐)
网站制作企业,网站的banner和导航栏是指什么?
如何在云主机上快速搭建网站?
在线制作视频网站免费,都有哪些好的动漫网站?
Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑
浅谈Javascript中的Label语句
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践
Laravel怎么创建自己的包(Package)_Laravel扩展包开发入门到发布
如何在建站之星网店版论坛获取技术支持?
如何确保西部建站助手FTP传输的安全性?
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel如何为API编写文档_Laravel API文档生成与维护方法
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
无锡营销型网站制作公司,无锡网选车牌流程?
HTML 中动态设置元素 name 属性的正确语法详解
高防服务器租用如何选择配置与防御等级?

