展会信息港展会大全

一个通用的JSP分页类,具有显示多组页码功能
来源:互联网   发布日期:2016-03-01 10:46:28   浏览:2624次  

导读: 最近几天学习jsp觉得很好,写了个分页类,给大家分享一下,同时也请高手指点。 第一部分:db.MysqlConn 数据库链接类 /***************************...

最近几天学习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>

赞助本站

人工智能实验室

相关热词: 开发 编程 android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港