数据库连接池+JavaBean+JSP+SQL Server+JDBC3.0的数据库分页技术
主要特色: 1.使用最新的JDBC3.0数据库驱动。 2.大幅度减化了JSP的反复调用JavaBean,可以直接写SQL,无须再使用连接数据库连接池。 3.将大量的工作交给JavaBean做,JSP负责页面控制。 4.最大特色是极其简单,程序编写也极其简单,非常适合初学者。 5.使用的是tomcat数据库连接池,方便快速。 请提供E_mail,为大家分享,如有高手,请指点不是。 本人E_mail:[email protected],望多提意见。 ****************************************文件名《page.jsp》******************************************************************* 文件名《page.jsp》 <%@ page language="java" import="java.sql.*, my.*" %> <%@ page contentType="text/html; charset=gb2312" %> <jsp:useBean id="pagi" scope="page" class="my.Pagi"/> <html> <body> <table align="center" border=1> <% String CountQuery="select count(*) from 商品资料"; String query = "select * from 商品资料"; ResultSet rs = pagi.querySql(CountQuery,query, request); String footer = pagi.PageFooter(); %> <tr> <td >商品编号</font></td> <td >商品名称</font></td> </tr> <% if (pagi.intPageCount>0) { int i=0; while (rs.next()) { i++; if (i>((pagi.intPage-1)*pagi.intPageSize) &&(i<=pagi.intPage*pagi.intPageSize)) { %> <tr> <td><%=rs.getString(1)%></td> <td><%=rs.getString(2)%></td> </tr> <% } } } out.println("<tr><td colspan=2>"+footer+"</td></tr>"); rs.close(); pagi.close_all(); %> </table> </body> </html> ****************************************文件名《pagi.java》********************************************************* 文件名《pagi.java》 package my; import java.util.*; import java.sql.*; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import my.DB.*; public class Pagi { ResultSet CountTopicrs=null; //初始化总记录数Rs变量 ResultSet Pagirs=null; //初始化分页时Rs变量 public int intCountTopic=0; //主题总数 public int intPageSize;//每页显示主题数 public int intPageCount;//总页数 public int intPage=1; //当前页数 public String nowPage; // int i; public String HttpFile;//初始化当前页intPage变量,以准确便获取当前页。 //当前的地址栏的文件 DB db; //定义Linkdb类的一个对象。 public Pagi()//定义构造器,初始化每页显示的主题数和数据库的连接。 { intPageSize=4; //每页显示的记录数目 db = new DB(); } //Countsql:总记录的Query字符串。[形式为select count(*) from tablename] //Pagisql :要分页的Query字符串。[形式为select * from tablename where ...] //request :参数传递过程中的变量。[用来控制翻页时的pages变量] public ResultSet querySql(String Countsql,String Pagisql,HttpServletRequest request)throws Exception { HttpFile=request.getRequestURI(); //获取当前文件名。 nowPage=request.getParameter("pages"); //获取当前页,将数值赋予intPage变量。[分页栏中必须要有pages参数] if (nowPage==null) { intPage=1; } else { intPage=Integer.parseInt(nowPage); if (intPage<1) intPage=1; } CountTopicrs=db.executeQuery(Countsql); //@@@@@@@@@@@@获取总记录数的结果集。 if (CountTopicrs.next()) { intCountTopic=CountTopicrs.getInt(1); } intPageCount = (intCountTopic+intPageSize-1)/intPageSize; //获取总页数。 if (intPage>intPageCount)//如果当前页大于总页数,则当前页等于总页数。 { intPage=intPageCount; } CountTopicrs.close(); //关闭总主题数的数据集。 db.close_all(); Pagirs=db.executeQuery(Pagisql); //@@@@@@@@@@@@@@@获取执行分页的结果集。 return Pagirs; }//end querySql function. public int getCountTopic()//获取记录总数。 { return intCountTopic; } public int getPageCount() //获取总页数。 { return intPageCount; } public int getIntPage() //获取当前页数。 { return intPage; } public String PageFooter() { String str = ""; int next, prev; prev=intPage-1; next=intPage+1; str += "查询到<font color=red>"+getCountTopic()+"</font>条记录"+ " 共<font color=red>"+getPageCount()+"</font>页"; str +=" 第<font color=red>"+getIntPage()+"</font>页 "; if(intPage>1) str += " <A href=" + HttpFile + "?pages=1"+">首页</A> "; else str += " 首页 "; if(intPage>1) str += " <A href=" + HttpFile + "?pages=" + prev + ">上一页</A> "; else str += " 上一页 "; if(intPage<intPageCount) str += " <A href=" + HttpFile + "?pages=" + next + ">下一页</A> "; else str += " 下一页 "; if(intPageCount>1&&intPage!=intPageCount) str += " <A href=" + HttpFile + "?pages=" + intPageCount + ">尾页</A>"; else str += " 尾页 "; return str; } public void close_all() { db.close_all(); } } ************************************************文件名《DB.java》******************************************************** 文件名《DB.java》 package my; import java.sql.*; import javax.naming.*; import javax.sql.DataSource; //一个用于查找数据源的工具类。 public class DB { private Connection con=null; private Statement stmt=null; ResultSet rs=null; public ResultSet executeQuery(String sql) throws Exception { rs=null; try { Context initCtx = new javax.naming.InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource)envCtx.lookup("jdbc/bn"); con=ds.getConnection(); stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=stmt.executeQuery (sql); } catch(SQLException e){throw e;} catch(NamingException e){throw e;} return rs; } //执行Insert,Update语句 public void executeUpdate(String sql) throws Exception { stmt = null; rs=null; try { Context initCtx = new javax.naming.InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource)envCtx.lookup("jdbc/bn"); con=ds.getConnection(); stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); stmt.executeQuery(sql); stmt.close(); con.close(); } catch(SQLException ex) { System.err.println("执行SQL语句出错: " + ex.getMessage()); } } // 关闭stmt和关闭连接 public void close_all() { try{ stmt.close(); con.close(); } catch(SQLException e){e.printStackTrace();} } } ***************************************《tomcat中的数据库连接池的设置》******************************************************************************** …… …… …… <Context path="/SQL" docBase="D:\SQL_JSP" debug="0" reloadable="true" crossContext="true"> <Resource name="jdbc/bn" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/bn"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <parameter> <name>driverClassName</name> <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value> </parameter> <parameter> <name>url</name> <value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev</value> </parameter> <parameter> <name>username</name> <value>cyg</value> </parameter> <parameter> <name>password</name> <value>325345353</value> </parameter> <parameter> <name>maxActive</name> <value>20</value> </parameter> <parameter> <name>maxIdle</name> <value>20</value> </parameter> <parameter> <name>maxWait</name> <value>-1</value> </parameter> </ResourceParams> </Context> </Host> </Engine> </Service> </Server>