最近幾天學習jsp覺得很好,寫了個分頁類,給大家分享一下,同時也請高手指點。
第一部分:db.MysqlConn 數據庫鏈接類
/**********************************************************
路徑:zon.db.MysqlConn
文件:MysqlConn.java
用途:數據庫連接
package db;
import java.sql.*;
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
//導入數據庫操作的類
public class MysqlConn {
private Connection conn; //連接對象
private Statement stmt; //語句對象
private ResultSet rs; //結果集對象
private String MySqldriver="com.mysql.jdbc.Driver"; //MYSQL Server驅動程序字符串
private String MySqlURL = "jdbc:mysql://"; //MYSQL Server連接字符串
String databasex;
String webRealPath="D://zon//WebRoot//"; //根路徑實際路徑,用於讀取數據庫鏈接參數的配置文件 database.xml
// 定義數據庫鏈接參數變量
String server="localhost";
String dbname="phpzon";
String user="admin";
String pass="admin";
String port="3306";
String dbchara="utf-8";
String dbprefix="zon_"; //表前綴
public void setDatabasex(String databasex){
this.databasex = databasex;
}
public String getDatabasex(){
return databasex;
}
public void setWebRealPath(String webRealPath){
this.webRealPath = webRealPath;
}
public String getWebRealPath(){
return webRealPath;
}
/*******************************************************************
* 用 com.mysql.jdbc.Driver 驅動
* 該方法取得連接所需各種參數,組成連接字符串,
* 然後再建立連接* server;dbname,user,pass,port
* 分別表示MYSQL 服務器的地址、數據庫名、用戶名、密碼、端口,
* 本方法已作改造,直接通過配置文件 WEB-INF//database.xml 讀取鏈接信息
********************************************************************/
public Connection getMysqlConn()
{
//根據數據庫配置文件獲得數據庫鏈接參數 database.xml
//建立解析工廠
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);//忽略元素內容中的空格
//創建解析器
DocumentBuilder dbxml;
try {
dbxml = factory.newDocumentBuilder();
//得到解析文件
Document doc;
try {
doc = dbxml.parse("file:///"+webRealPath+"WEB-INF//database.xml");
doc.normalize();
//得到根元素
//Element root = doc.getDocumentElement();
//得到所有db元素
//NodeList dbs = doc.getElementsByTagName("db");
//NodeList dbType = doc.getElementsByTagName("type");
NodeList dbDriver = doc.getElementsByTagName("driver");
NodeList dbUrl = doc.getElementsByTagName("url");
NodeList dbServer = doc.getElementsByTagName("server");
NodeList dbPort =doc.getElementsByTagName("port");
NodeList dbDbname =doc.getElementsByTagName("dbname");
NodeList dbUser =doc.getElementsByTagName("user");
NodeList dbPassword =doc.getElementsByTagName("password");
NodeList dbChara =doc.getElementsByTagName("chara");
NodeList dbPrefix =doc.getElementsByTagName("prefix");
//獲取各參數值
int i=0;
MySqldriver = dbDriver.item(i).getFirstChild().getNodeValue(); //MYSQl驅動程序 MySqldriver = "com.mysql.jdbc.Driver";
MySqlURL = dbUrl.item(i).getFirstChild().getNodeValue(); //鏈接路徑 "jdbc:mysql://";
server = dbServer.item(i).getFirstChild().getNodeValue(); //數據庫服務器地址
port = dbPort.item(i).getFirstChild().getNodeValue(); //數據庫端口 默認 3306
dbname = dbDbname.item(i).getFirstChild().getNodeValue(); //數據庫名稱
user = dbUser.item(i).getFirstChild().getNodeValue(); //用戶名
pass = dbPassword.item(i).getFirstChild().getNodeValue(); //密碼
dbchara = dbChara.item(i).getFirstChild().getNodeValue(); //數據庫編碼
dbprefix = dbPrefix.item(i).getFirstChild().getNodeValue(); //表名前綴
try{//完整的連接字符串
MySqlURL=MySqlURL+server+":"+port+"/"+dbname+"?user="+user+"&password="+pass+"&useUnicode=true&characterEncoding="+dbchara;
Class.forName(MySqldriver);
conn = DriverManager.getConnection(MySqlURL);
}
catch(Exception e){
System.out.println("操作數據庫出錯,請仔細檢查");
System.err.println(e.getMessage());
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ParserConfigurationException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return conn;
}
/*
* 執行sql 語句,返回記錄集 ,主要針對 select、show語句
*/
public ResultSet sqlQuery(String sql){
sql=SetQuery(sql);
Statement temStmt = null; //語句對象
ResultSet temRs = null; //結果集對象
Connection temConn=this.getMysqlConn();
try {
temStmt=temConn.createStatement();
//執行sql查詢語句,得到記錄集
temRs=temStmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return temRs;
}
/*
* 執行Insert sql 語句
*/
public void sqlInsert(String sql){
sql=SetQuery(sql);
try {
this.getMysqlConn().createStatement().executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 執行update sql 語句
*/
public void sqlUpdate(String sql){
sql=SetQuery(sql);
try {
this.getMysqlConn().createStatement().executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 執行delete sql 語句
*/
public void sqlDelete(String sql){
sql=SetQuery(sql);
try {
this.getMysqlConn().createStatement().executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/*
* 執行sql 語句,返回記錄總數 ,主要針對 select語句
*/
public int sqlTotalRow(String sql){
Statement temStmt = null; //語句對象
ResultSet temRs = null; //結果集對象
int result = 0; //結果值
Connection temConn=this.getMysqlConn();
try {
temStmt=temConn.createStatement();
//執行sql查詢語句,得到記錄集
temRs=temStmt.executeQuery(sql);
temRs.last();
result = temRs.getRow();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
//設置SQL語句,會自動把SQL語句裡的#@__替換為 配置文件中的 表 前綴 zon_
public String SetQuery(String sql)
{
String prefix="#@__";
sql = sql.replace(prefix, this.dbprefix);
return sql;
}
//關閉數據庫連接
public void close(){
try{
//rs.close();
//stmt.close();
conn.close();
}
catch(SQLException sqlexception){
sqlexception.printStackTrace();
}
}
}
第二部分: db.MysqlPages 分頁類代碼
/**********************************************************
路徑:zon.db.MysqlPages
文件:MysqlPages.java
用途:優化的分頁
***********************************************************/
package db;
import java.sql.*;
import db.MysqlConn; //數據庫鏈接類
/**********************************************************
*功能:
*標記:
*作者:劉亞東 Yodon.Liu
*日期:2009-8-30 下午09:20:12
***********************************************************/
public class MysqlPages {
int PageSize=10; //調用時可自定義變量,每頁條數
int PageRows=8; //調用時可自定義變量,頁碼組,每組顯示多少個頁碼編號,8默認,實際顯示數會自動+1,包含當前頁碼
int RowCount=0;//總條數
int PageCount=1;//總頁數
int inPage=1; //當前頁碼默認值
int inRow=0; //本頁查詢開始行號 默認 0
String linkPage = "?"; //調用時可以自定義變量,頁碼鏈接頁面
String webRealPath="/"; //網站真實根路徑,通過jsp頁面獲得之後傳遞過來
//顯示文字 默認, 調用時可以自定義變量
String langs = "首頁,上一頁,下一頁,尾頁,共,條記錄,頁";
String[] langss= langs.split(",");
String lang_first_page = langss[0];
String lang_pre_page = langss[1];
String lang_next_page = langss[2];
String lang_end_page = langss[3];
String lang_total = langss[4];
String lang_record_number = langss[5];
String lang_page = langss[6];
//臨時
String sql="";
String page="1";
private Statement stmt; //語句對象
private ResultSet rs; //結果集對象
//返回值,分頁頁碼列表
String pagesInfo="";
/****
* 主方法 獲得 分頁列表字符串
* @return
*/
public String pageInfo(){
MysqlConn DBConn = new MysqlConn(); //創建數據庫鏈接實例,可根據自己的實際情況修改
RowCount = DBConn.sqlTotalRow(sql); //在MysqlConn中有一個 sqlTotalRow 方法,用於求記錄總和(請根據自己的求記錄總和的方式修改此處)
PageCount=(RowCount+PageSize-1)/PageSize;
if(page!=null) inPage=Integer.parseInt(page);
if(inPage<1) inPage=1;
if(inPage>PageCount) inPage=PageCount;
inRow = (inPage-1)*PageSize;
sql=sql + " limit " + String.valueOf(inRow) + "," + String.valueOf(PageSize);
rs=DBConn.sqlQuery(sql);
//頁碼顯示部分
int PageRowsL = PageRows/2; // 生成當前頁碼 左側最大調用的頁碼數
int PageRowsR = PageRows-PageRows/2; // 生成當前頁碼 右側最大調用的頁碼數
if(inPage<=PageRowsL){
PageRowsL = inPage-1;
PageRowsR = PageRows-inPage+1;
}
if(inPage+PageRowsR>PageCount){
PageRowsL = PageRows-(PageCount-inPage);
PageRowsR = PageCount-inPage;
}
int PageLs=1; //左側開始最大頁碼號
int PageRs=PageCount; //左側開始最大頁碼號
PageLs = ((inPage - PageRowsL)>=1)?inPage-PageRowsL:1; //實際左側第一個顯示的頁碼
PageRs = ((inPage + PageRowsR)<=PageCount)?inPage+PageRowsR:PageCount; //實際右側第一個顯示的頁碼
pagesInfo = pagesInfo+("<div class=dh_pages><ul><li class=total>"+lang_total+""+RowCount+lang_record_number+","+PageCount+lang_page+"</li>");
//首頁
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page=1/">"+lang_first_page+"</a></li>");
//上一頁
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+(inPage-1)+"/">"+lang_pre_page+"</a></li>");
//左側頁碼
if(PageLs!=inPage){
for(int iL=PageLs;iL<inPage;iL++){
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+iL+"/">"+iL+"</a></li>");
}
}
//當前頁碼
pagesInfo = pagesInfo+("<li class=inpage><a href="/" mce_href="/"""+linkPage+"page="+inPage+"/">"+inPage+"</a></li>");
//右側頁碼
if(PageRs!=inPage){
for(int iR=inPage+1;iR<=PageRs;iR++){
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+iR+"/">"+iR+"</a></li>");
}
}
//下一頁
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+(inPage+1)+"/">"+lang_next_page+"</a></li>");
//尾頁
pagesInfo = pagesInfo+("<li><a href="/" mce_href="/"""+linkPage+"page="+PageCount+"/">"+lang_end_page+"</a></li>");
pagesInfo = pagesInfo+("</ul></div>");
return pagesInfo;
}
public void setPage(String page){
this.page = page;
}
public String getPage(){
return page;
}
public void setSql(String sql){
this.sql = sql;
}
public String getSql(){
return sql;
}
public void setLinkPage(String linkPage){
this.linkPage = linkPage;
}
public String getLinkPage(){
return linkPage;
}
public void setPageSize(int PageSize){
this.PageSize = PageSize;
}
public int getPageSize(){
return PageSize;
}
public void setPageRows(int PageRows){
this.PageRows = PageRows;
}
public int getPageRows(){
return PageRows;
}
public void setLangs(String langs){
this.langs = langs;
}
public String getLangs(){
return langs;
}
public void setLang_first_page(String lang_first_page){
this.lang_first_page = lang_first_page;
}
public String getLang_first_page(){
return lang_first_page;
}
public void setLang_pre_page(String lang_pre_page){
this.lang_pre_page = lang_pre_page;
}
public String getLang_pre_page(){
return lang_pre_page;
}
public void setLang_next_page(String lang_next_page){
this.lang_next_page = lang_next_page;
}
public String getLang_next_page(){
return lang_next_page;
}
public void setLang_end_page(String lang_end_page){
this.lang_end_page = lang_end_page;
}
public String getLang_end_page(){
return lang_end_page;
}
public void setLang_total(String lang_total){
this.lang_total = lang_total;
}
public String getLang_total(){
return lang_total;
}
public void setLang_record_number(String lang_record_number){
this.lang_record_number = lang_record_number;
}
public String getLang_record_number(){
return lang_record_number;
}
public void setLang_page(String lang_page){
this.lang_page = lang_page;
}
public String getLang_page(){
return lang_page;
}
/*
String lang_first_page = "首頁";
String lang_pre_page = "上一頁";
String lang_next_page = "下一頁";
String lang_end_page = "尾頁";
String lang_total = "共";
String lang_record_number = "條記錄";
String lang_page = "頁";
*/
public void setWebRealPath(String webRealPath){
this.webRealPath = webRealPath;
}
public String getWebRealPath(){
return webRealPath;
}
public void setRs(ResultSet rs){
this.rs = rs;
}
public ResultSet getRs(){
return rs;
}
}
第三部分:JSP頁面 調用
<%
//設置屬性值
DBPages.setPageSize(10); //每頁條數
DBPages.setPageRows(4); //每組頁數,最好是偶數,會自動加上當前頁碼
//為不同的按鈕設置 圖片,也可以直接設置文字,如:首頁、上一頁、下一頁、尾頁
DBPages.setLang_first_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/start.gif border=0>");
DBPages.setLang_pre_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/previous.gif border=0>");
DBPages.setLang_next_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/next.gif border=0>");
DBPages.setLang_end_page("<img src="../themes/" mce_src="themes""+_dh_manage_themes+"/images/end.gif border=0>");
DBPages.setSql("select * from admin "); //sql語句
//傳遞當前頁碼
DBPages.setPage(request.getParameter("page"));
//執行並獲取分頁內容
String pageInfos = DBPages.pageInfo();
//顯示當前頁面記錄列表
ResultSet rs=DBPages.getRs();
while(rs.next()){
out.println(rs.getString("admin_id"));
out.println(rs.getString("admin_user"));
}
%>
第四部分:樣式表 用於控制頁碼行顯示效果
/* 通用分頁樣式 */
.dh_pages{
}
.dh_pages ul{
float:left;
padding:12px 0px 12px 16px;
}
.dh_pages ul li{
float:left;
font-family:Tahoma;
line-height:17px;
margin-right:6px;
}
.dh_pages ul li a{
float:left;
padding:2px 4px 2px;
color:#666;
border-bottom:1px solid #EEE;
}
.dh_pages ul li a:hover{
color:#690;
text-decoration:none;
padding:2px 4px 1px;
border-bottom:2px solid #690;
}
.dh_pages ul li.inpage a,.pagebox ul li.inpage a:hover{
color:#F63;
padding:2px 4px 1px;
border-bottom:2px solid #F63;
font-weight:bold;
}
/* 分頁中總頁碼、總數樣式,一般居左或居右對齊 */
.dh_pages .total{
float:right;
line-height:21px;
color:#999;
}
.dh_pages .total strong{
color:#666;
font-weight:normal;
margin:0px 2px;
}
第五部分:附數據庫鏈接參數配置文件 database.xml
本例中讀取數據庫時使用了一個數據庫鏈接的自定義配置文件,放在 WebRoot/WEB-INF/ 目錄下,其內容如下:
<?xml version="1.0" encoding="utf-8"?> <dbconfig> <db id="1"> <type>mysql</type> <driver>com.mysql.jdbc.Driver</driver> <url>jdbc:mysql://</url> <server>localhost</server> <port>3306</port> <dbname>zon</dbname> <user>admin</user> <password>admin</password> <chara>utf-8</chara> <prefix>zon_</prefix> </db> </dbconfig>