最近几天学习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语句里的dede_替换为 配置文件中的 表 前缀 zon_
public String SetQuery(String sql)
{
String prefix="dede_";
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>