分享
 
 
 

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

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在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="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调试通过

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有