加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

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

发布时间:2023-05-09 13:38:06 所属栏目:教程 来源:
导读:在jsp中经常要用到查询数据库中的数据,同常我们的做法是使用sql语句“select * from tablename order by id desc”,这样的做法有一个缺点,当数据库很大的时候查询的速度会变的很慢,在asp中有一种方法
在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调试通过
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!