关于分页……

landc 2002-04-14 01:09:05
不用Vector,如何实现象csdn这样的分页方式??????
...全文
6 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
landc 2002-04-14
那应该如何实现?
回复
huyuefox 2002-04-14
一点建议:
可以把动态设置表格的颜色也加进去,这样页面不会显得单调,程序也更具灵活性
回复
landc 2002-04-14
当然:)
回复
tyscon 2002-04-14
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?
回复
发动态
发帖子
Web 开发
创建于2007-09-28

7.9w+

社区成员

Java Web 开发
申请成为版主
社区公告
暂无公告