`
xchyou
  • 浏览: 28279 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

JSP+MYSQL+Java类优化分页的实例

 
阅读更多

 在JSP中经常要用到查询数据库中的数据,同常我们的做法是使用SQL语句“select * from tablename order by id desc”,这样的做法有一个缺点,当数据库很大的时候查询的速度会变的很慢,在ASP中有一种方法 "select top "&recpage&" * from tablename where id not in (select top "&(recpage*(currentpage-1))&" id from products order by id desc) order by id desc"其中recpage为每页显示个数, currentpage为当前页数.不过在MYSQL数据库中没有“select top * " 语句,而可以代替的语句是”select * from tablename limit position, counter “position 指示从哪里开始查询,如果是0则是从头开始,counter 表示查询的个数,通过JSP+JAVA查询数据库,查询获取的数据暂时存放在内存中在JSP中通过调取JAVA类,直接从内存中提取数据,速度有了很大提高。

  下面的例子是一个关于网友评论的部分程序,假如你有一个专门供网友浏览的网站,而现在又想和网友互动起来,加一个评论是不错的想法,那么你可以把下面的程序加上,建一个表其中加一个photo_id字段和你的表关联起来后,就可以让网友对你的图片点评了。

  Comment.java是一个评论的类

//<--------Comment.java ------->
package dbconnection;
public class Comment
{
 private String id;
 private String album_id;
 private String title;
 private String content;
 private String modi_time;
 private String user;
 public void setId(String ids)
 {
  this.id=ids;
 }
 public void setalbum_id(String album_ids)
 {
  this.album_id=album_ids;
 }
 public void setTitle(String titles)
 {
  this.title=titles;
 }
 public void setContent(String contents)
 {
  this.content=contents;
 }
 public void setModi_time(String modi_times)
 {
  this.modi_time=modi_times;
 }
 public void setUser(String users)
 {
  this.user=users;
 }
 public String getId()
 {
  return id;
 }
 public String getalbum_id()
 {
  return album_id;
 }
 public String getTitle()
 {
  return title;
 }
 public String getContent()
 {
  return content;
 }
 public String getModi_time()
 {
  return modi_time;
 }
 public String getUser()
 {
  return user;
 }
}

  TestSql.java就是我们查询数据库要用到的类了,具体的调用请看下面的comment.jsp文件。

/**
* Title jsp+mysql优化分页的例子
* @author: cyd
* Copyright: Copyright (c) 2003
* @version 1.0
* 日期 2004-9-22
*/
//<--------TestSql.java ------->
package dbconnection;
import java.sql.*;
import java.util.*;
public class TestSql
{
 Statement stmt=null;
 ResultSet rs=null;
 conn c=null;
 Comment comments[]=null;
 Vector v=null;
 int total;
 int PageSize;
 int PageCount;
 public TestSql(Connection cn) throws SQLException
 {
  stmt=cn.createStatement();
 }
 //查询获取记录
 public Comment[] getComment(int pagesize,int page) throws SQLException
 {
  this.PageSize=pagesize;
  String sql="select * from comment order by id desc limit "+(page-1)*pagesize+","+pagesize;
  Comment comments[]=null;
  v=new Vector();
  try
  {
   rs=stmt.executeQuery(sql);
   while(rs.next())
   {
    Comment p=new Comment();
    p.setId(rs.getString("id"));
    p.setTitle(rs.getString("title"));
    p.setContent(rs.getString("content"));
    p.setModi_time(rs.getString("modi_time"));
    p.setUser(rs.getString("user"));
    v.add(p);
   }
  }
  catch(SQLException e)
  {
   System.err.println("err");
  }
  comments=new Comment[v.size()];
  v.copyInto(comments);
  return comments;
 }
 //获取总记录数
 public int getTotal()
 {
  return total;
 }
 //获取总页数
 public int getPageCount()
 {
  try
  {
   rs=stmt.executeQuery("select count(*) from comment ");
   rs.next();
   this.total=rs.getInt(1);
   this.PageCount=(rs.getInt(1)+PageSize-1)/PageSize;
  }
  catch(SQLException e)
  {
   System.err.println("err");
  }
  return PageCount;
 }
 //释放资源
 public void close() throws SQLException
 {
  if (stmt != null)
  {
   stmt.close();
   stmt = null;
  }
  if (rs!=null)
  {
   rs.close();
   rs=null;
  }
 }
}
<!--comment.jsp -------------------------------------------------------------------->
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
<%@ page import="java.io.*" %>
<%@ page import="dbconnection.DBConnectionManager" %>
<%
 DBConnectionManager connMgr;//这是数据库连接池的类,具体源码你可以在网找到。
 connMgr = DBConnectionManager.getInstance();
 Connection con = connMgr.getConnection("idb");//从连接池中获的一个连接
 int CurrentPage=1;
 int intPageCount,intRowCount;
 if(request.getParameter("page")!=null)
  CurrentPage=Integer.parseInt(request.getParameter("page"));
 if(CurrentPage<1)
  CurrentPage=1;
  int intPageSize=5;//设置每页显示5条
%>
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style type="text/css">
<!--
.style3 {color: #FF0000}
body {
margin-left: 0px;
margin-top: 0px;
margin-right: 0px;
margin-bottom: 0px;
background-color: #FFFDDF;
}
-->
</style>
<script language="javascript">
function goto(frm)
{
 var gourl ="comment.jsp?";
 gourl += "&page=" + (frm.page.value);
 var hid=parseInt(frm.hid.value);
 if(parseInt(frm.page.value)>hid||frm.page.value<=0){
  alert("错误!请确定你输入的数字在1-"+hid+"之间");
  return false;
 }
 window.location.href(gourl);
}</script>
</head>
<body>
<%
Comment[] p=null;
TestSql ts=null;
try
{
 ts=new TestSql(con);
 p=ts.getComment(intPageSize,CurrentPage);//ts=.getComments(PageSize(每页显示个数),Page(页数))
 intPageCount =ts.getPageCount(); //获的页数
 intRowCount=p.length;
 if(CurrentPage>intPageCount)
  CurrentPage = intPageCount;
  int total=ts.getTotal(); //获取记录总数
 %>
 <table width="748" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="17"><table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#EBEADF">
<tr>
<td height="25" bgcolor="#A7E081"><div align="center" class="style3">网友评论</div></td>
</tr>
<!-- start loop by tr -------------------------->
<%
if(intRowCount>0)
{
 for(int i=0;i<intRowCount;i++)
 {
  %>
  <tr>
  <td height="20">
  <table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#EBEADF">
  <tr>
   <td height="20">  <img src=http://tech.ddvip.com/2006-11/"image/dot11.gif" width="9" height="9"> <%=p[i].getUser()%>于 < %=p[i].getModi_time()%> 留言 </td>
  </tr>
  <tr>
   <td bgcolor="#FBFBF9" style="padding:5px 5px 5px 5px;line-height:18px;"> <%=p[i].getContent()%></td>
  </tr>
</table>
</td>
</tr>
<%
}
}
else
{
%>
<tr>
<td height="20" bgcolor="#EBEADF">
<%
out.print("   暂时没有评论");
}
%>
</td>
</tr>
<!-- end loop by tr -------------------------->
</table></td>
</tr>
<tr>
<td height="17" bgcolor="#FBFBF9">
<div align="center">
<form style="margin:0 0 0 0 ">
<div align="center">第<%=CurrentPage%>页  共<%=intPageCount%>页  
<%if(CurrentPage>1){%>
<a href="comment.jsp?page=<%=CurrentPage-1%>">上一页</a>  
<%}else{%>
上一页  
<%}%>
<%if(CurrentPage>=intPageCount){%>
下一页
<%}else{%>
<a href="comment.jsp?page=<%=CurrentPage+1%>">下一页</a>
<%}%>
跳至
<input type="hidden" name="hid" value="<%=intPageCount%>">
<input name="page" type="text" size="2" onChange="goto(this.form)">

<input type="button" name="Button2" value="Go->" style="font-size:12px ">
</div>
</form>
</div></td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
<%
}
catch(Exception e)
{
 e.printStackTrace();
}
finally{
 connMgr.freeConnection("idb", con);
 connMgr.release();
 ts.close();
 p=null;
}
%>

  注:win2000+tomcat5.0调试通过;Redhat9+tomcat5.0调试通过

 

分享到:
评论

相关推荐

    Java+MySQL+JSP+Java原生手写实现分页

    本项目“Java+MySQL+JSP+Java原生手写实现分页”正是一个专注于展示如何使用Java后端、MySQL数据库、JSP(Java Server Pages)以及AJAX(异步JavaScript和XML)技术来实现这一功能的实例。以下是这个项目所涉及的...

    Jsp+Servlet+MyBatis完成分页查询

    然后,创建一个服务类的实例,调用其分页查询方法,并传递这些参数。 3. **设计MyBatis映射文件**:在MyBatis的映射文件中,定义一个包含分页条件的SQL查询。可以使用`limit`或`offset`来实现分页,具体语法取决于...

    登录servlet+jsp+mysql

    本项目标题“登录servlet+jsp+mysql”表明它使用了Servlet作为后端控制器,JSP(JavaServer Pages)作为视图层进行用户界面展示,并借助MySQL数据库来存储和管理用户信息。以下将详细介绍这个系统的关键组成部分及其...

    JSP+SERVLET+MYSQL实现的增删改查javaweb小例子

    在IT行业中,Web开发是一项核心技能,而JSP(JavaServer Pages)、Servlet和MySQL是构建动态网站时常用的技术栈。本项目"JSP+SERVLET+MYSQL实现的增删改查javaweb小例子"提供了一个基础的实战示例,帮助开发者了解...

    JSP+Servlet+MySQL的真分页代码,保证一清二楚

    本项目"JSP+Servlet+MySQL的真分页代码,保证一清二楚"正是一个实现真分页功能的实例,下面我们将深入探讨这个项目所涉及的关键技术。 首先,JSP(JavaServer Pages)是Java平台上的一种动态网页技术,它允许开发者...

    JSP+mysql的BBS系统

    JSP+MySQL的BBS系统可以进一步利用其他技术进行优化和增强,如Spring MVC框架简化控制层逻辑,Hibernate或MyBatis作为ORM工具减少数据库操作的复杂性,Bootstrap或jQuery提升前端交互体验,甚至可结合Redis缓存热门...

    jsp+mySql 真假分页

    在jsp中实现假分页,可以使用Java集合类如ArrayList或Vector,将所有数据存储在内存中,然后在客户端通过JavaScript控制DOM元素的显示和隐藏来模拟分页效果。 **对比与选择** 1. 数据量:如果数据量较小,假分页...

    JSP+Mysql留言板

    【JSP+Mysql留言板】是一个简单的Web应用实例,它结合了Java Server Pages(JSP)技术和MySQL数据库来实现一个在线留言功能。这个留言板由三个主要的JSP文件构成: 1. **message_insert.jsp**:这是用户进行留言的...

    SSH+Mysql无刷新分页实例

    在这个"SSH+Mysql无刷新分页实例"中,我们将探讨如何利用SSH框架与MySQL数据库实现网页的无刷新分页功能,从而提高用户体验。 首先,SSH框架中的Spring负责控制层,它提供依赖注入(Dependency Injection,DI)和...

    JSP+JavaBean实现MySQL子查询数据库分页

    本教程将详细讲解如何使用JSP(JavaServer Pages)配合JavaBean来实现MySQL数据库的子查询分页功能。在Eclipse 3.4环境下,我们可以轻松地完成这一过程。 首先,我们需要理解JSP和JavaBean的基本概念。JSP是一种...

    基于JSP+Servlet图书管理系统

    【基于JSP+Servlet图书管理系统】是一个典型的Web应用程序开发实例,它利用了Java技术栈中的核心组件来构建一个用于管理图书信息的系统。系统的主要功能包括图书的添加、删除、修改和查询,以及用户管理等。以下是这...

    jsp+javaBean+Mysql实现BBS系统

    【标题】:“jsp+javaBean+Mysql实现...总之,“jsp+javaBean+Mysql实现BBS系统”是一个典型的Web应用开发实例,涉及到了前后端交互、业务处理和数据管理等多个层面的技术,对于学习和掌握Web开发有着重要的实践价值。

    jsp+java+mysql新闻发布系统

    【jsp+Java+MySQL新闻发布系统】是一个基于Web的动态网站应用程序,主要利用JavaServer Pages(JSP)技术、Java后端编程以及MySQL数据库来构建一个功能完善的新闻发布平台。这个系统能够实现新闻的发布、编辑、删除...

    基于JDBC+MySQL+Servlet+JSP+Java实现简单校园论坛系统.zip

    该压缩包文件“基于JDBC+MySQL+Servlet+JSP+Java实现简单校园论坛系统.zip”包含了一个使用Java技术栈构建的校园论坛系统的源代码。这个系统利用了JDBC(Java Database Connectivity)来与MySQL数据库进行交互,...

    基于servlet+jsp+mysql+jdbc网上书店系统.zip

    本项目“基于Servlet + JSP + MySQL + JDBC的网上书店系统”是一个典型的企业级Web应用开发实例,旨在帮助初学者熟悉Java Web开发流程,提升技能水平。下面将详细介绍该系统的核心技术和实现方式。 首先,Servlet是...

    JSP+servlet实现后台超市管理系统

    【标题】"JSP+servlet实现后台超市管理系统"是一个典型的Web应用开发项目,它结合了Java服务器页面(JSP)和Servlet技术,用于构建一个基于Java的后台管理系统。在这个系统中,开发人员使用了JDK 1.7作为Java开发...

    jqGrid 前端框架 连接后台实例 java servlet+jsp+mysql

    这个实例结合了Java Servlet、JSP(Java Server Pages)和MySQL数据库,为我们提供了一个完整的前后台交互解决方案。 首先,jqGrid允许用户通过Ajax方式动态加载数据,支持多种数据格式,包括JSON、XML和CSV等。在...

    mysql+jsp+javabean实现分页技术

    **MySQL分页** MySQL数据库提供了`LIMIT`和`OFFSET`关键字,用于在查询结果中获取特定范围的数据,从而实现分页。例如,如果我们有一个名为`users`的表,我们可以用以下SQL语句获取第一页(每页显示10条记录): `...

    JAVA和JSP分页显示实例

    本实例将介绍如何利用Java和JSP实现一个简单的分页显示功能。 首先,我们需要理解分页的基本原理。分页通常涉及到两个关键参数:当前页码(currentPage)和每页显示的条目数量(pageSize)。通过这两个参数,我们...

Global site tag (gtag.js) - Google Analytics