最近幾天學習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>