现在的位置: 首页 > 综合 > 正文

JSP 连接池技术实现分页(源码贴出来了)

2013年01月23日 ⁄ 综合 ⁄ 共 11996字 ⁄ 字号 评论关闭

在工作目录下META-INF中创建一个context.xml,其代码如下:

<Context> 

<Resource

name="jdbc/zihan" //随便自己的命名

type="javax.sql.DataSource"

password="yd"

driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

maxIdle="2"

maxWait="5000"

username="sa"

url="jdbc:microsoft:sqlserver://localhost;DatabaseName=news"

maxActive="10"/>

</Context>

在这里配置移植性强。

二、

然后创建JDBC.java文件,其代码如下:

package com.mwq.database;

 

import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

 

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

 

/**

 

 * @author mwq

 *

 */

public class JDBC {

 

          
protected Connection conn;

 

          
protected Statement stmt;

 

          
protected PreparedStatement prpdStmt;

 

          
protected CallableStatement cablStmt;

 

          
protected ResultSet rs;

          
static DataSource ds;

 

          
static {

                    
try {

                               
Context initCtx=new InitialContext();

                               
ds=(DataSource)initCtx.lookup("java:comp/env/jdbc/zihan");

                    
} catch (NamingException e) {

                               
// TODO Auto-generated catch block

                               
e.printStackTrace();

                    
}

          
}

 

          
public boolean openConn(boolean autoCommit) {

                    
boolean isOpen = true;

                    
try {

                               
conn = ds.getConnection();

                               
if (!autoCommit)

                                          
conn.setAutoCommit(false);

                    
} catch (SQLException e) {

                               
isOpen = false;

                               
System.out.println("------
在创建数据库连接时抛出异常,内容如下:");

                               
e.printStackTrace();

                    
}

                    
return isOpen;

          
}

 

          
public boolean closeConn() {

                    
boolean isCommit = true;

                    
try {

                               
conn.commit();

                    
} catch (SQLException e) {

                               
isCommit = false;

                               
System.out.println("------
在提交数据库事务时抛出异常,内容如下:");

                               
e.printStackTrace();

                               
try {

                                          
conn.rollback();

                               
} catch (SQLException e1) {

                                          
System.out.println("------
在回滚数据库事务时抛出异常,内容如下:");

                                          
e1.printStackTrace();

                               
}

                    
} finally {

                               
try {

                                          
conn.close();

                               
} catch (SQLException e) {

                                          
System.out.println("------
在关闭数据库连接时抛出异常,内容如下:");

                                          
e.printStackTrace();

                               
}

                    
}

                    
return isCommit;

          
}

 

}

三、创建存放数据的OperateTb.java文件

package com.mwq.database;

 

import java.util.ArrayList;

import java.util.List;

 

public class OperateTb extends JDBC {

 

          
public List<Object[]> selectBySQL(String sql) {

                    
List<Object[]> notes = new ArrayList<Object[]>();

                    
this.openConn(true);

                    
try {

                               
this.stmt = conn.createStatement();

                               
this.rs = this.stmt.executeQuery(sql); //
通过父类的属性操作数据库

                               
int l = rs.getMetaData().getColumnCount(); //
获得数据表的列数

                               
while (rs.next()) { //
通过循环将记录保存到List

                                          
Object[] note = new Object[l];

                                          
for (int i = 0; i < l; i++) {

                                                    
note[i] = rs.getObject(i + 1);

                                          
}

                                          
notes.add(note);

                               
}

                               
this.rs.close();

                               
this.stmt.close();

                    
} catch (Exception e) {

                               
System.out.println("------
在检索记录时抛出异常,内容如下:");

                               
e.printStackTrace();

                    
}

                    
this.closeConn(); //
调用父类的关闭数据库连接的方法

                    
return notes;

          
}

 

 

}

分页的Pagination.java文件

package com.mwq.tool;

 

import java.util.ArrayList;

import java.util.List;

 

/**

 * @作者紫寒11202010-05-23

 */

 

public class Pagination
{

 

          
private int currentPage; //
当前页

 

          
private int totalPages; //
总页数

 

          
private int pageRows; //
每页记录数

 

          
private int totalRows; //
总记录数

 

          
private int pageStartRow; //
每页开始记录

 

          
private int pageEndRow; //
每页结束记录

 

          
private boolean hasPreviousPage;//
是否有上一页

 

          
private boolean hasNextPage; //
是否有下一页

 

          
private List<Object[]> totalList; //
要分页的数据

 

          
public Pagination() {

          
}

 

          
//
初始化分页信息

          
public void initPageBean(List<Object[]> totalList, int pageRows) {

                    
this.totalList = totalList;

                    
this.pageRows = pageRows;

                    
this.totalRows = totalList.size();

                    
this.currentPage = 1;

                    
//
计算总页数

                    
if ((totalRows % pageRows) == 0) {

                               
totalPages = totalRows / pageRows;

                               
if (this.totalRows == 0)

                                          
this.totalPages = 1;

                    
} else {

                               
totalPages = totalRows / pageRows + 1;

                    
}

                    
//
默认无上一页

                    
this.hasPreviousPage = false;

                    
//
判断是否有下一页

                    
if (currentPage == totalPages) {

                               
hasNextPage = false;

                    
} else {

                               
hasNextPage = true;

                    
}

                    
//
默认第一页开始的记录数为1

                    
this.pageStartRow = 1;

                    
//
确定第一页结束的记录数

                    
if (totalRows < pageRows) {

                               
this.pageEndRow = totalRows;

                    
} else {

                               
this.pageEndRow = pageRows;

                    
}

          
}

 

          
//
获得当前页信息

          
public List<Object[]> getCurrentPageList() {

                    
if (currentPage * pageRows < totalRows) {

                               
pageEndRow = currentPage * pageRows;

                               
pageStartRow = pageEndRow - pageRows;

                    
} else {

                               
pageEndRow = totalRows;

                               
pageStartRow = pageRows * (totalPages - 1);

                    
}

                    
List<Object[]> pageList = new ArrayList<Object[]>(pageEndRow

                                          
- pageStartRow + 1);

                    
if (totalRows != 0) {

                               
for (int i = pageStartRow; i < pageEndRow; i++) {

                                          
pageList.add(totalList.get(i));

                               
}

                    
}

                    
return pageList;

          
}

 

          
//
获得上一页信息

          
public List<Object[]> getPreviousPageList() {

                    
currentPage = currentPage - 1;

                    
if (currentPage < 1)

                               
currentPage = 1;

                    
if (currentPage >= totalPages) {

                               
hasNextPage = false;

                    
} else {

                               
hasNextPage = true;

                    
}

                    
if ((currentPage - 1) > 0) {

                               
hasPreviousPage = true;

                    
} else {

                               
hasPreviousPage = false;

                    
}

                    
List<Object[]> pageList = this.getCurrentPageList();

                    
return pageList;

          
}

 

          
//
获得下一页信息

          
public List<Object[]> getNextPageList() {

                    
currentPage = currentPage + 1;

                    
if (currentPage > totalPages)

                               
currentPage = totalPages;

                    
if ((currentPage - 1) > 0) {

                               
hasPreviousPage = true;

                    
} else {

                               
hasPreviousPage = false;

                    
}

                    
if (currentPage >= totalPages) {

                               
hasNextPage = false;

                    
} else {

                               
hasNextPage = true;

                    
}

                    
List<Object[]> pageList = this.getCurrentPageList();

                    
return pageList;

          
}

 

          
//
获得指定页信息

          
public List<Object[]> getAppointPageList(int currentPage) {

                    
this.currentPage = currentPage;

                    
if (currentPage > this.totalPages)

                               
this.currentPage = this.totalPages;

                    
if (currentPage < 1)

                               
this.currentPage = 1;

                    
if (this.currentPage > 1) {

                               
this.hasPreviousPage = true;

                    
} else {

                               
this.hasPreviousPage = false;

                    
}

                    
if (this.currentPage < this.totalPages) {

                               
this.hasNextPage = true;

                    
} else {

                               
this.hasNextPage = false;

                    
}

                    
List<Object[]> pageList = this.getCurrentPageList();

                    
return pageList;

          
}

 

          
//
返回当前页

          
public int getCurrentPage() {

                    
return currentPage;

          
}

 

          
//
返回每页记录数

          
public int getPageRows() {

                    
return pageRows;

          
}

 

          
//
返回当前页开始记录

          
public int getPageStartRow() {

                    
return pageStartRow;

          
}

 

          
//
返回当前页结束记录

          
public int getPageEndRow() {

                    
return pageEndRow;

          
}

 

          
//
返回总页数

          
public int getTotalPages() {

                    
return totalPages;

          
}

 

          
//
返回总记录数

          
public int getTotalRows() {

                    
return totalRows;

          
}

 

          
//
返回是否有上一页

          
public boolean isHasPreviousPage() {

                    
return hasPreviousPage;

          
}

 

          
//
返回是否有下一页

          
public boolean isHasNextPage() {

                    
return hasNextPage;

          
}

 

}

实现分页的index.jsp文件

<%@
page
language="java"
import="java.util.*"
pageEncoding="GB2312"%>

<jsp:useBean
id="optb"
class="com.mwq.database.OperateTb"
scope="page"/>

<jsp:useBean
id="pagination"
class="com.mwq.tool.Pagination"
scope="session"/>

<!DOCTYPE
HTML PUBLIC
"-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <title>利用数据分页BeanResultSet结果集进行分页</title>

  </head>

 

  <link
rel="stylesheet"
href="css/style.css">

 

 

  <script
language="javascript"
type="">

  <!--

  function checkPage(formName){

    if (formName.requestPage.value==""){

      alert("请填写欲跳转页码!");

      formName.requestPage.focus();

      return false;

    }

    if (isNaN(formName.requestPage.value)){

      alert("欲跳转页码必须为数值!");

      formName.requestPage.value="";

      formName.requestPage.focus();

      return false;

    }

  }

  //-->

  </script>

 

<body
topmargin="0">

<table
width="100%" 
border="0"
cellspacing="0"
cellpadding="0">

  <tr>

    <td
width="11%"></td>

    <td
width="78%"></td>

    <td
width="11%"></td>

  </tr>

  <tr>

    <td>&nbsp;</td>

    <td
bgcolor="#CCFFFF"><table
width="100%" 
border="0"
cellspacing="0"
cellpadding="0">

      <tr>

        <td>&nbsp;</td>

      </tr>

      <tr>

        <td
align="center"><font
size="2"><b>利用数据分页BeanResultSet结果集进行分页</b></font></td>

      </tr>

      <tr>

        <td>&nbsp;</td>

      </tr>

      <%

      List<Object[]> pageList=null;

      if(request.getParameter("requestPage")==null){

          List<Object[]> totalList=optb.selectBySQL("select * from news");

          pagination.initPageBean(totalList,5);

          pageList=pagination.getCurrentPageList();

      }else{

      String requestPage=request.getParameter("requestPage");

      if(requestPage.equals("previousPage")){

              pageList=pagination.getPreviousPageList();           

      }elseif(requestPage.equals("nextPage")){

              pageList=pagination.getNextPageList();           

      }

      else{

           int appointPage=Integer.valueOf(requestPage);

              pageList=pagination.getAppointPageList(appointPage);

<

抱歉!评论已关闭.