`
keemoving
  • 浏览: 16037 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP+Servlet+Oracle实现分页

 
阅读更多
菜鸟学javaweb,拼凑一个JSP+Servlet+oracle实现分页的实例,其中有明显不足之处,贴在此主要是方便自己记忆。
数据库建表语句:
-- Create table
create table BLOGINFO
(
  ID          NUMBER not null,
  BLOGTITLE   VARCHAR2(50) not null,
  BLOGCONTENT VARCHAR2(4000) not null,
  AUTHOR      VARCHAR2(30) not null,
  BLOGTIME    LONG not null
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64
    minextents 1
    maxextents unlimited
  );
-- Add comments to the columns 
comment on column BLOGINFO.ID
  is '表id';
comment on column BLOGINFO.BLOGTITLE
  is '博客标题';
comment on column BLOGINFO.BLOGCONTENT
  is '博客内容';
comment on column BLOGINFO.AUTHOR
  is '作者,用户昵称';
-- Create/Recreate primary, unique and foreign key constraints 
alter table BLOGINFO
  add constraint BLOGINFO_ID primary key (ID)
  using index 
  tablespace USERS
  pctfree 10
  initrans 2
  maxtrans 255
  storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  );
alter table BLOGINFO
  add constraint AUTHOR_NAME foreign key (AUTHOR)
  references USERINFO (LOGINNAME);


加上一个javaVO,也如下:
package com.dylan.vo;

public class BlogInfo {

	int id;
	String blogtitle;
	String blogcontent;
	String author;
	long blogtime;
	String blogtimes;
	String blogt;

	public String getBlogtimes() {
		return blogtimes;
	}

	public void setBlogtimes(String blogtimes) {
		this.blogtimes = blogtimes;
	}

	public String getBlogt() {
		return blogt;
	}

	public void setBlogt(String blogt) {
		this.blogt = blogt;
	}

	public BlogInfo() {
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getBlogtitle() {
		return blogtitle;
	}

	public void setBlogtitle(String blogtitle) {
		this.blogtitle = blogtitle;
	}

	public String getBlogcontent() {
		return blogcontent;
	}

	public void setBlogcontent(String blogcontent) {
		this.blogcontent = blogcontent;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public long getBlogtime() {
		return blogtime;
	}

	public void setBlogtime(long blogtime) {
		this.blogtime = blogtime;
	}

}



新建一个PageModel类,List是为封装BlogInfo做准备的,还增加了为分页做准备的一些属性和方法:

package com.dylan.vo;

import java.util.List;

public class PageModel {

	// 结果集
	private List list;

	// 查询总记录数
	private int totalRecords;

	// 每页多少条数据
	private int pageSize;

	// 第几页
	private int pageNo;

	/**
	 * 总页数
	 * 
	 * @return
	 */
	public int getTotalPages() {
		return (totalRecords + pageSize - 1) / pageSize;
	}

	/**
	 * 取得首页
	 * 
	 * @return
	 */
	public int getTopPageNo() {
		return 1;
	}

	/**
	 * 上一页
	 * 
	 * @return
	 */
	public int getPreviousPageNo() {
		if (pageNo <= 1) {
			return 1;
		}
		return pageNo - 1;
	}

	/**
	 * 下一页
	 * 
	 * @return
	 */
	public int getNextPageNo() {
		if (pageNo >= getBottomPageNo()) {
			return getBottomPageNo();
		}
		return pageNo + 1;
	}

	/**
	 * 取得尾页
	 * 
	 * @return
	 */
	public int getBottomPageNo() {
		return getTotalPages();
	}

	public List getList() {
		return list;
	}

	public void setList(List list) {
		this.list = list;
	}

	public int getTotalRecords() {
		return totalRecords;
	}

	public void setTotalRecords(int totalRecords) {
		this.totalRecords = totalRecords;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}
}


事务处理的类:
package com.dylan.service;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.dylan.util.DBHelper;
import com.dylan.util.DateUtil;
import com.dylan.vo.BlogInfo;
import com.dylan.vo.PageModel;

public class BlogInfoQueryService {

	private static BlogInfoQueryService instance = new BlogInfoQueryService();

	private BlogInfoQueryService() {
	};

	public static BlogInfoQueryService getInstance() {
		return instance;
	}

	/**
	 * 查询此用户所拥有的所有博客
	 * 
	 * @param loginname
	 * @return
	 * @throws SQLException
	 */
	public PageModel queryBlogInfoForAll(String loginname, int pageNo,
			int pageSize) throws SQLException {
		StringBuffer sql = new StringBuffer();
		PageModel pageModel = null;
		
		sql.append("select * ")
		.append("from")
		.append("(")
		.append("select rownum rn,t.* ")
		.append("from")
		.append("(")
		.append("select * ")
		.append("from bloginfo where author= ")
		.append("?")
		.append(" order by id")
		.append(") t ")
		.append("where rownum <= ?")
		.append(")")
		.append("where rn > ? ");
		
		Connection conn = DBHelper.getConnetion();
		PreparedStatement pstm =conn.prepareStatement(sql.toString());
		ResultSet rs = null;
		try {

			System.out.println(sql);
			pstm.setString(1, loginname);
			pstm.setInt(2, pageNo * pageSize);
			pstm.setInt(3, (pageNo - 1) * pageSize);
			
			rs = pstm.executeQuery();
			List<BlogInfo> blogInfoList = new ArrayList<BlogInfo>();
			while (rs.next()) {
				BlogInfo blogInfo = new BlogInfo();

				blogInfo.setId(rs.getInt(2));
				blogInfo.setBlogtitle(rs.getString(3));
				blogInfo.setBlogcontent(rs.getString(4));
				blogInfo.setAuthor(rs.getString(5));
				long l = rs.getLong(6);
				Date date = new Date(l);
				DateUtil du = new DateUtil();
				blogInfo.setBlogtimes(du.dateToString(date));

				blogInfoList.add(blogInfo);
			}
			pageModel = new PageModel();
			pageModel.setList(blogInfoList);
			pageModel.setTotalRecords(getTotalRecords(loginname, conn));
			pageModel.setPageSize(pageSize);
			pageModel.setPageNo(pageNo);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			pstm.close();
			conn.close();
		}
		return pageModel;
	}

	public int getTotalRecords(String loginname, Connection conn)
			throws SQLException {
		String sql = "select count(*) from bloginfo where author = '"+loginname+"'";
		Statement pstm = conn.createStatement();
		ResultSet rs = null;
		int count = 0;
		try {
			rs = pstm.executeQuery(sql);
			rs.next();
			count = rs.getInt(1);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			rs.close();
			pstm.close();
			conn.close();
		}
		return count;
	}
}


加上一个Servlet
package com.dylan.servlet;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.dylan.service.BlogInfoQueryService;
import com.dylan.vo.PageModel;

public class QueryBlogInfoServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		String loginname = request.getParameter("loginname");
		System.out.println("pageNo="+request.getParameter("pageNo"));
		System.out.println("pageSize="+request.getParameter("pageSize"));
		int pageNo =Integer.parseInt(request.getParameter("pageNo"));
		int pageSize = Integer.parseInt(request.getParameter("pageSize"));
		
		System.out.println(pageNo+"--"+pageSize);
		PageModel pageModel = null;
		System.out.println(loginname);
		BlogInfoQueryService biqs = BlogInfoQueryService.getInstance();
		try {
			pageModel = biqs.queryBlogInfoForAll(loginname, pageNo, pageSize);
			System.out.println("上一页:"+pageModel.getPreviousPageNo());
			System.out.println("下一页:"+pageModel.getNextPageNo());
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		request.setAttribute("pageModel",pageModel);
		System.out.println("打印pageModel对象"+request.getAttribute("pageModel"));
		RequestDispatcher rd = request.getRequestDispatcher("/listblog.jsp");
		rd.forward(request, response);	
	}
}

最后就是JSP了。
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ page import="com.dylan.vo.BlogInfo"%>
<%@ page import="java.util.List"%>
<%@ page import="com.dylan.service.*"%>
<%@ page import="com.dylan.vo.*"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'userregeste.jsp' starting page</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<%
			int pageNo = 1;
			int pageSize = 3;
			PageModel pageModel = (PageModel) request.getAttribute("pageModel");
		%>
		<script type="text/javaScript">
function topPage() {
window.self.location = "<%=basePath%>queryBlogInfoServlet?loginname=<%=request.getSession().getAttribute("loginname")%>&pageNo=<%=pageModel.getTopPageNo()%>&pageSize=3";
}

function previousPage() {
	window.self.location = "<%=basePath%>queryBlogInfoServlet?loginname=<%=request.getSession().getAttribute("loginname")%>&pageNo=<%=pageModel.getPreviousPageNo()%>&pageSize=3";
}

function nextPage() {
	window.self.location = "<%=basePath%>queryBlogInfoServlet?loginname=<%=request.getSession().getAttribute("loginname")%>&pageNo=<%=pageModel.getNextPageNo()%>&pageSize=3";
}

function bottomPage() {
	window.self.location = "<%=basePath%>queryBlogInfoServlet?loginname=<%=request.getSession().getAttribute("loginname")%>&pageNo=<%=pageModel.getBottomPageNo()%>&pageSize=3";
}
</script>
	</head>
	<body bgcolor="#abe2d6">
		<table width="650">
			<tr bgcolor="#ade2d6">
				<td width="560">
					我的博文
				</td>
				<td></td>
				<td></td>
				<td>
					<a href="<%=basePath%>writeblog.jsp" shape="rect">写博客</a>
				</td>
			</tr>
		</table>

		<table width="650">
			<hr />
			<tr bgcolor="#ade2d6">
				<td bgcolor="yellow" width="400">
					博客标题
				</td>
				<td bgcolor="yellow">
					博客作者
				</td>
				<td bgcolor="yellow">
					发表时间
				</td>
				<td bgcolor="yellow">
					更多操作
				</td>
			</tr>
			<%
				List<BlogInfo> bloginfolist = pageModel.getList();
				//List<BlogInfo> bloginfolist = (List<BlogInfo>)request.getAttribute("bloginfolist");
			%>
			<%
				for (BlogInfo blogInfo : bloginfolist) {
			%>
			<tr>
				<td width="400">
					<a
						href="<%=basePath%>queryBlogInfoByIdServlet?id=<%=blogInfo.getId()%>"><%=blogInfo.getBlogtitle()%></a>
				</td>
				<td><%=blogInfo.getAuthor()%></td>
				<td><%=blogInfo.getBlogtimes()%></td>
				<td>
					更多操作
				</td>
			</tr>
			<%
				}
			%>
			<tr>
				<td colspan="5">
					共&nbsp;<%=pageModel.getTotalPages()%>&nbsp;页&nbsp;&nbsp;&nbsp;&nbsp;
					当前第&nbsp;<%=pageModel.getPageNo()%>页&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
					<input type="button" value="首页" onClick="topPage()">
					<input type="button" value="上一页" onClick="previousPage()">
					<input type="button" value="下一页" onClick="nextPage()">
					<input type="button" value="尾页" onClick="bottomPage()">
				</td>
			</tr>
		</table>
	</body>
</html>


以上代码有些不合理的地方,暂时没有处理,如pageNo和pageSize赋值应该是放在JSP中可以填写的,这个是Oracle分页的第一种方法。

分享到:
评论

相关推荐

    jsp+JavaBean+Servlet_Oracle和Mysql分页

    项目中的"pagination_4_Oracle"可能包含了Oracle分页的具体实现。 5. MySQL数据库分页:MySQL提供了LIMIT关键字,可以直接配合OFFSET实现分页查询。在Java中,通过调整LIMIT子句的参数即可实现不同页码的数据获取。...

    jsp+servlet+oracle模仿百度分页

    带学员课上做的oracle模仿百度分页样式的例子。比较适合初学者参考,jdbc工具类是自己写的,没有使用第三方分页组件。tomcat是apache-tomcat-7.0.41,myeclipse是MyEclipse 9.0,oracle是11g。例子中用的是海量数据...

    jsp+servlet+javabean实现网上商城项目完整源码

    网上商城项目是现代电子商务的重要组成部分,本项目采用经典的JSP、Servlet和JavaBean技术进行实现,提供了完整的源码,旨在帮助开发者理解和学习如何构建一个功能完备、界面美观的网上购物平台。下面将对这个项目的...

    使用JSP+JavaBean+Servlet实现数据分页

    本教程将详细讲解如何利用JSP(JavaServer Pages)、JavaBean和Servlet技术来实现数据分页功能。我们将讨论以下几个关键知识点: 1. **JSP基础**:JSP是Java的一种动态网页技术,它允许我们在HTML页面中嵌入Java...

    java+jsp+servlet+dao+oracle做得分页 增删改查操作

    综上所述,"java+jsp+servlet+dao+oracle做得分页 增删改查操作"是一个典型的Java Web应用开发流程,涉及了前端展示、后端处理、数据库交互以及分页技术。理解这些技术的原理和协作方式,对于理解和开发类似的Web...

    jsp+servlet在线考试系统

    jsp+servlet在线考试系统 考试流程 1. 管理员在后台添加当日考试试卷的题型(判断、单选、多选、简单、编程) .2.学生通过手机号码注册账户,密码MD5加密 登录系统进行考试(题目题库随机抽取) 3.教师后台登录系统...

    jsp+servlet+javabean 增删改查分页

    总结起来,"jsp+servlet+javabean"的Model2模式在"增删改查分页"的应用中,涉及到JavaBean的数据封装,Servlet的控制逻辑,JSP的视图展示,以及数据库操作、请求转发、会话管理和异常处理等多个环节。理解并熟练掌握...

    JSP+Servlet+EJB3.0+Oracle10g火车售票系统

    本系统主要实现火车查询售票功能,主要的功能如下: 客户端管理功能: (1)动车基本信息管理模块;...4.本设计采用JSP+Servlet+EJB3.0+Oracle10g工具进行开发,最后通过JDBC进行与数据库的相关的链接。

    jsp成绩管理系统jsp+servlet+javabean

    【JSP成绩管理系统】是一个基于Java Web技术的典型应用,主要采用了MVC(Model-View-Controller)设计模式,结合了JSP、Servlet和JavaBean组件。本系统旨在实现对学生成绩的有效管理,包括成绩录入、查询、统计等...

    JSP+SERVLET+JDBC实现对数据库的增删改查

    ### JSP+SERVLET+JDBC:数据库操作的核心技术 在现代Web开发中,Java Server Pages (JSP)、Servlets 和 Java Database Connectivity (JDBC) 是构建动态网站及与数据库交互的关键技术。本文将深入探讨如何使用这三种...

    jsp+servlet+javabean(jdbc)框架搭建说明手册

    7. **查询条件与列表**:userQuery.jsp页面整合查询条件和信息列表,通过JavaScript与后端Servlet配合实现动态分页效果。 总结,本手册详细介绍了基于JSP、Servlet和JavaBean的Web框架搭建过程,从基础架构搭建到...

    初学者写留言本,带分页的java+servlet+oracle!

    【初学者写留言本,带分页的java+servlet+oracle!】 在IT行业中,开发一个留言本系统是初学者入门Web开发的经典实践项目。这个项目涵盖了Java、Servlet和Oracle数据库这三个关键组件,它们共同构建了一个功能完善的...

    使用jsp+mvc+servlet实现分页

    本项目是基于JSP(JavaServer Pages)+MVC(Model-View-Controller)设计模式+Servlet实现的分页功能,这是一套经典的Java Web开发架构。 首先,我们来理解JSP。JSP是Java的一种视图技术,它允许开发者在HTML中嵌入...

    jsp+javabean+servlet 论坛源码

    5. 查询和分页:Servlet处理查询请求,返回特定条件下的帖子列表,JSP则展示结果,可能涉及分页功能。 6. 错误处理和异常管理:通过Servlet捕获和处理可能出现的错误,提供友好的错误页面。 通过学习和分析这个论坛...

    基于jsp+servlet+ajax的图书管理系统.zip

    综上所述,"基于jsp+servlet+ajax的图书管理系统"是一个利用Java Web技术实现的、具有高效互动性的图书管理应用,它结合了前后端分离、异步数据交换等现代Web开发理念,为用户提供流畅的使用体验。

    hibernate jsp/servlet +AJAX的文档管理系统(毕业设计)

    【hibernate jsp/servlet +AJAX的文档管理系统(毕业设计)】 本文将深入探讨一个基于Hibernate、JSP/Servlet以及AJAX技术构建的文档管理系统。这个系统旨在提供一个高效、用户友好的平台,用于存储、检索和管理...

    基于jsp+servlet实现的教材征订与发放管理系统.zip

    【基于jsp+servlet实现的教材征订与发放管理系统】 该系统是使用Java Web技术栈,主要包括JSP(JavaServer Pages)和Servlet,构建的一个教育领域信息化解决方案。它旨在提高教材征订与发放过程的效率,确保教育...

    jsp分页 oracle 插件demo

    本篇将详细介绍如何在JSP(JavaServer Pages)环境中,结合Oracle数据库实现分页功能,并通过一个名为"jsp分页 oracle 插件demo"的示例来演示具体步骤。 首先,我们需要了解JSP分页的基本原理。在JSP中,分页通常...

    新闻发布系统(jsp+servlet)

    在这个系统中,JSP(JavaServer Pages)和Servlet是核心组件,它们协同工作以实现动态网页的生成和后端业务逻辑的处理。 JSP是Java平台上的动态网页技术,它允许开发人员在HTML或XML文档中嵌入Java代码,以实现页面...

    基于Jsp+Servlet实现图书管理系统.zip

    【标题】基于Jsp+Servlet实现图书管理系统 这个项目是一个基于Java Web技术的图书管理系统,主要使用了JSP(JavaServer Pages)和Servlet技术来构建前端和后端交互的平台。JSP是一种动态网页开发技术,它允许在HTML...

Global site tag (gtag.js) - Google Analytics