Hafele今天又重新看了JSP论坛(v1.0)的代码,觉得里面有很多是重复的,如分页技术;现在写了一个分页  JavaBean,等有更多的时间再整理一下JSP论坛的代码。当然里面的还有很多逻辑可以用JavaBean来写的,有待  慢慢改进。不过在此声明,我对JavaBean也不是很了解,希望高手多多指点,当然更希望这些垃圾代码能够对  你有所帮助。  
该JavaBean必须调用另一个连接数据库的JavaBean,该JavaBean所用到的数据库是MySql,不过你可以通过  修改Linkdb.java来将其改为另一种数据库。为了使代码容易理解,我尽量做了解释。代码具体如下:  一、连接数据库的JavaBean:Linkdb.java  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Linkdb.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
package pagination;  import java.sql.*;  public class Linkdb {  
String strDriver="org.gjt.mm.mysql.Driver";  
//使用时请具体修改数据库名称,用户名和密码。  
String strConn="jdbc:mysql://localhost/forum?user=root&password=admin";  
private Connection conn = null;  
private Statement stmt = null;  
ResultSet rs = null;  public Linkdb()  
{  
//连接MySql_jdbc驱动程序  
try {  
Class.forName(strDriver).newInstance();  
} catch (Exception E) {  
System.err.println("不能连接MySql数据库!");  
}  
}  
//执行Select语句  
public ResultSet executeQuery(String sql) {  
rs = null;  
try {  
conn = DriverManager.getConnection(strConn);  
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  
rs = stmt.executeQuery(sql);  
}catch(SQLException ex) {  
System.err.println("执行SQL语句出错:" + ex.getMessage());  
}  
return rs;  
}  //执行Insert,Update语句  
public void executeUpdate(String sql) {  
stmt = null;  
rs=null;  
try {  
conn = DriverManager.getConnection(strConn);  
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);  
stmt.executeQuery(sql);  
stmt.close();  
conn.close();  
}  
catch(SQLException ex) {  
System.err.println("执行SQL语句出错: " + ex.getMessage());  
}  
}  public void closeStmt(){  
try{  
stmt.close();  
}  
catch(SQLException e){  
e.printStackTrace();  
}  
}  public void closeConn(){  
try{  
conn.close();  
}  
catch(SQLException e){  
e.printStackTrace();  
}  
}  
}  二、分页的JavaBean:Pagi.java  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Pagi.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
package pagination;  import java.util.*;  
import java.sql.*;  
import java.io.*;  
import javax.servlet.*;  
import javax.servlet.http.*;  public class Pagi  
{  
ResultSet CountTopicrs=null; //初始化总记录数Rs变量  
ResultSet Pagirs=null; //初始化分页时Rs变量  public int intCountTopic=0; //主题总数  
public int intPageSize; //每页显示主题数  
public int intPageCount; //总页数  
public int intPage=1; //当前页数  
// int i;  public String nowPage; //初始化当前页intPage变量,以准确便获取当前页。  
public String HttpFile; //当前的地址栏的文件。  Linkdb db; //定义Linkdb类的一个对象。  
//定义构造器,初始化每页显示的主题数和数据库的连接。  
public Pagi(){  
intPageSize=2;  
db = new Linkdb();  
}  //Countsql:总记录的Query字符串。[形式为select count(*) from tablename]  
//Pagisql :要分页的Query字符串。[形式为select * from tablename where ...]  
//request :参数传递过程中的变量。[用来控制翻页时的pages变量]  public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)  
throws SQLException{  
//获取当前文件名。  
HttpFile=request.getRequestURI();  //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数]  
nowPage=request.getParameter("pages");  if (nowPage==null){ intPage=1; }  
else{ intPage=Integer.parseInt(nowPage);  if (intPage<1) intPage=1; }  //获取总记录数的结果集。  
CountTopicrs=db.executeQuery(Countsql);  
if (CountTopicrs.next())  
{  
intCountTopic=CountTopicrs.getInt(1);  
}  
//获取总页数。  
intPageCount = (intCountTopic+intPageSize-1)/intPageSize;  
//如果当前页大于总页数,则当前页等于总页数。  
if (intPage>intPageCount)  
{  
intPage=intPageCount;  
}  
//关闭总主题数的数据集。  
CountTopicrs.close();  //获取执行分页的结果集。  
Pagirs=db.executeQuery(Pagisql);  
return Pagirs;  
}//end querySql function.  //获取记录总数。  
public int getCountTopic()  
{  
return intCountTopic;  
}  //获取总页数。  
public int getPageCount()  
{  
return intPageCount;  
}  //获取当前页数。  
public int getIntPage()  
{  
return intPage;  
}  //获取当前页的数据。boodata为True,表示要加入该数据到当前页。  
//这里可能会在JSP调用时影响速度[因为调用时要多一层循环],因此放到JSP中嵌入,待改进。  
//该代码暂时保留。  
// public boolean getData(){  
// boolean boodata=false;  
// if (intPageCount>0)  
// {  
// try  
// {  
// while (Pagirs.next())  
// {  
// i++;  
/// if (i>((intPage-1)*intPageSize) &&(i<=intPage*intPageSize))  
// {  
// boodata=true;  
// }  
// } //endwhile.  
// }//end try.  
// catch(Exception e){  
// System.out.println(e.toString());  
// }  
// } //endif.  
// return boodata;  
// } //end getData();  //分页栏函数。  
public String PageFooter() {  
String str = "";  
int next, prev;  
prev=intPage-1;  
next=intPage+1;  
str +="共<font color="red">"+getCountTopic()+"</font>篇"+" 分<font  color="red">"+getPageCount()+"</font>页显示";  
str +=" 第<font color="red">"+getIntPage()+"</font>页 ";  
if(intPage>1)  
str += " <A href=" + HttpFile + "?pages=1"+">第一页</A> ";  
else str += " 第一页 ";  if(intPage>1)  
str += " <A href=" + HttpFile + "?pages=" + prev + ">上一页</A> ";  
else str += " 上一页 ";  if(intPage<intPageCount)  
str += " <A href=" + HttpFile + "?pages=" + next + ">下一页</A> ";  
else str += " 下一页 ";  if(intPageCount>1&&intPage!=intPageCount)  
str += " <A href=" + HttpFile + "?pages=" + intPageCount + ">最后页</A>";  
else str += " 最后页 ";  return str;  
}  } //end.  三、调用实例:testpage.jsp  
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%testpage.java%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
<%@ page language="java" import="java.sql.*, pagination.*" %>  
<%@ page contentType="text/html; charset=gb2312" %>  
<jsp:useBean id="pagi" scope="page" class="pagination.Pagi" />  
<html>  <body>  
<table border=1 align="center">  
<%  
String CountQuery="select count(*) from member";  
String query = "select * from member";  
//读queyrSql方法,返回结果集。  
ResultSet rs = pagi.querySql(CountQuery,query, request);  
String footer = pagi.PageFooter(); //读分页栏  out.println("<tr><td align="center"><font color="red">姓名</font></td><td align="center"><font  color="red">来自</font></td></tr>");  
if (pagi.intPageCount>0)  
{  
int i=0;  
while (rs.next())  
{  
i++;  
String aa="";  
String bb="";  
if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize))  
{  
aa=rs.getString(2);  
bb=rs.getString(4);  
%>  
<tr><td><%=aa%></td><td><%=bb%></td></tr>  
<%  
}  
} //endwhile.  
} //endif.  
out.println("<tr><td colspan=2>"+footer+"</td></tr>");  
rs.close();  
%>  
</table>  
</body>  
</html>  
给分,ok?