Pages.java:
package com.myproject.db;
import java.sql.*;
public abstract class Pages {
String filename = ""; //Jsp文件名
int pages = 1; //页号
int totals = 0; //记录总数
int perpagenum = 20; //每页显示记录数
int style = 0; //分页字符串样式
int allpage = 1; //总页数
int cpage = 1; //当前页
int spage = 1; //开始记录数
String sSQL = ""; //SQL语句
String listPageBreak = ""; //用于页面显示的html语句
String[] pagesign = {
"", "", "", "", "", "", "", ""}; //显示的字符列表(如:“首页”、“上一页”、“下一页”、“尾页”)
public Pages() {
}
public String getFileName() {
return this.filename;
}
public void setFileName(String aFileName) {
this.filename = aFileName;
}
public int getPages() {
return this.pages;
}
public void setPages(int aPages) {
this.pages = aPages;
}
public int getTotals() {
return this.totals;
}
public void setTotals(int aTotals) {
this.totals = aTotals;
}
public int getPerPageNum() {
return this.perpagenum;
}
public void setPerPageNum(int aperpagenum) {
this.perpagenum = aperpagenum;
}
public int getStyle() {
return this.style;
}
public void setStyle(int aStyle) {
this.style = aStyle;
}
public void setSQL(String SQL) {
this.sSQL = SQL;
}
public void setPagesign(String[] apagesign) {
this.pagesign = apagesign;
}
public void doPageBreak() {
this.allpage = (int) Math.ceil( (this.totals + this.perpagenum - 1) /
this.perpagenum);
int intPage = this.pages;
//如果输入的页号大于总页数 设置当前页为1,否则当前页设置为输入的页号
if (intPage > this.allpage) { // pages == 0
this.cpage = 1;
}
else {
this.cpage = intPage;
}
//开始记录数
this.spage = (this.cpage - 1) * this.perpagenum;
getPageBreakStr();
}
//用于页面显示的html语句
public String getListPageBreak() {
return this.listPageBreak;
}
//得到要显示的字符列表(如:“首页”、“上一页”、“下一页”、“尾页”)
public void getPageBreakStr() {
//style == 0时:显示如“上一页”、“下一页”(有链接)
if (this.style == 0) {
if (this.cpage > 1) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage - 1) +
"'><font color=#FF0000>" +
pagesign[1] + "</font></a>]";
}
if (this.cpage < this.allpage) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage + 1) +
"' ><font color=#FF0000>" +
pagesign[2] + "</font></a>]";
}
}
//style == 1时:显示带图片的“上一页”、“下一页”(有链接)
if (this.style == 1) {
if (this.cpage > 1) {
this.listPageBreak +=
"<img src=images/prepage.gif align=absmiddle><font color=#FF0000>[<a href='" +
this.filename + "pages=" +
(cpage - 1) + "'><font color=#FF0000>" +
pagesign[1] + "</font></a>]</font>";
}
if (this.cpage < this.allpage) {
this.listPageBreak +=
"<img src=images/nextpage.gif align=absmiddle><font color=#FF0000>[<a href='" +
this.filename + "pages=" +
(cpage + 1) + "'><font color=#FF0000>" +
pagesign[2] + "</font></a>]</font>";
}
}
//style == 2时:显示如“首页”、“上一页”、“下一页”、“尾页”(有链接)
if (this.style == 2) {
if (this.cpage > 1) {
this.listPageBreak +=
"[<a href='" + this.filename +
"pages=1'><font color=#FF0000>" +
pagesign[0] +
"</font></a>] [<a href='" + this.filename + "pages=" + (cpage - 1) +
"'><font color=#FF0000>" +
pagesign[1] + "</font></a>]";
}
if (this.cpage < this.allpage) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage + 1) +
"'><font color=#FF0000>" +
pagesign[2] +
"</font></a>] [<a href='" + this.filename + "pages=" +
this.allpage +
"'><font color=#FF0000>" +
pagesign[3] + "</font></a>]";
}
}
//style == 3时:显示更多信息(有链接)
}
//得到一个sql字符串
public abstract String getSQLString(String pk);
//获得记录集
public abstract ResultSet getRs(TranContext DBSQL, String pk);
}
package com.myproject.db;
import java.sql.*;
public abstract class Pages {
String filename = ""; //Jsp文件名
int pages = 1; //页号
int totals = 0; //记录总数
int perpagenum = 20; //每页显示记录数
int style = 0; //分页字符串样式
int allpage = 1; //总页数
int cpage = 1; //当前页
int spage = 1; //开始记录数
String sSQL = ""; //SQL语句
String listPageBreak = ""; //用于页面显示的html语句
String[] pagesign = {
"", "", "", "", "", "", "", ""}; //显示的字符列表(如:“首页”、“上一页”、“下一页”、“尾页”)
public Pages() {
}
public String getFileName() {
return this.filename;
}
public void setFileName(String aFileName) {
this.filename = aFileName;
}
public int getPages() {
return this.pages;
}
public void setPages(int aPages) {
this.pages = aPages;
}
public int getTotals() {
return this.totals;
}
public void setTotals(int aTotals) {
this.totals = aTotals;
}
public int getPerPageNum() {
return this.perpagenum;
}
public void setPerPageNum(int aperpagenum) {
this.perpagenum = aperpagenum;
}
public int getStyle() {
return this.style;
}
public void setStyle(int aStyle) {
this.style = aStyle;
}
public void setSQL(String SQL) {
this.sSQL = SQL;
}
public void setPagesign(String[] apagesign) {
this.pagesign = apagesign;
}
public void doPageBreak() {
this.allpage = (int) Math.ceil( (this.totals + this.perpagenum - 1) /
this.perpagenum);
int intPage = this.pages;
//如果输入的页号大于总页数 设置当前页为1,否则当前页设置为输入的页号
if (intPage > this.allpage) { // pages == 0
this.cpage = 1;
}
else {
this.cpage = intPage;
}
//开始记录数
this.spage = (this.cpage - 1) * this.perpagenum;
getPageBreakStr();
}
//用于页面显示的html语句
public String getListPageBreak() {
return this.listPageBreak;
}
//得到要显示的字符列表(如:“首页”、“上一页”、“下一页”、“尾页”)
public void getPageBreakStr() {
//style == 0时:显示如“上一页”、“下一页”(有链接)
if (this.style == 0) {
if (this.cpage > 1) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage - 1) +
"'><font color=#FF0000>" +
pagesign[1] + "</font></a>]";
}
if (this.cpage < this.allpage) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage + 1) +
"' ><font color=#FF0000>" +
pagesign[2] + "</font></a>]";
}
}
//style == 1时:显示带图片的“上一页”、“下一页”(有链接)
if (this.style == 1) {
if (this.cpage > 1) {
this.listPageBreak +=
"<img src=images/prepage.gif align=absmiddle><font color=#FF0000>[<a href='" +
this.filename + "pages=" +
(cpage - 1) + "'><font color=#FF0000>" +
pagesign[1] + "</font></a>]</font>";
}
if (this.cpage < this.allpage) {
this.listPageBreak +=
"<img src=images/nextpage.gif align=absmiddle><font color=#FF0000>[<a href='" +
this.filename + "pages=" +
(cpage + 1) + "'><font color=#FF0000>" +
pagesign[2] + "</font></a>]</font>";
}
}
//style == 2时:显示如“首页”、“上一页”、“下一页”、“尾页”(有链接)
if (this.style == 2) {
if (this.cpage > 1) {
this.listPageBreak +=
"[<a href='" + this.filename +
"pages=1'><font color=#FF0000>" +
pagesign[0] +
"</font></a>] [<a href='" + this.filename + "pages=" + (cpage - 1) +
"'><font color=#FF0000>" +
pagesign[1] + "</font></a>]";
}
if (this.cpage < this.allpage) {
this.listPageBreak += "[<a href='" + this.filename + "pages=" +
(cpage + 1) +
"'><font color=#FF0000>" +
pagesign[2] +
"</font></a>] [<a href='" + this.filename + "pages=" +
this.allpage +
"'><font color=#FF0000>" +
pagesign[3] + "</font></a>]";
}
}
//style == 3时:显示更多信息(有链接)
}
//得到一个sql字符串
public abstract String getSQLString(String pk);
//获得记录集
public abstract ResultSet getRs(TranContext DBSQL, String pk);
}
MySQLPages.java:
package com.myproject.db;
import java.sql.ResultSet;
import org.apache.log4j.*;
public class MySQLPages
extends Pages {
static Logger logger = Logger.getLogger(MySQLPages.class.getName());
public MySQLPages() {
}
/**
* 重写父类的方法获得记录集
* @param DBSQL
* @param pk
* @return
*/
public ResultSet getRs(TranContext DBSQL, String pk) {
String SQL = "";
ResultSet rs = null;
try {
SQL = this.getSQLString(pk);
//logger.info(SQL);
DBSQL.prepareStatement(SQL);
rs = DBSQL.executeQuery();
return rs;
}
catch (Exception e) {
logger.error(e);
return null;
}
}
/**
* 重写父类的方法得到一个sql字符串
* @param pk
* @return
*/
public String getSQLString(String pk) {
String sql = this.sSQL;
//spage开始的记录数 perpagenum每页显示的记录数 该语句显示从spage开始的perpagenum条纪录
sql = sql + " limit " + spage + "," + perpagenum;
return sql;
}
} ==========================================
转的高手贴,希望有帮助
其实分页无非两种思路
1 数据库分页,用select limit语句,你每次提交一个参数,让数据库给你想要的数据
2页面分页,将数据全部检索出来,然后放到ArrayList或这是vector中,用<logic;itrator>循环显示,你可以参照上面的类,或者自己在ActionForm中设置一个pagenum属性,用<logic:equal name="form",property="pagenum" value="xx">来判断输出那一页的数据
http://www.mx68.com/WebDeveloper/2006-03-10/WebDeveloper_42309.shtml