love fish大鵬一曰同風起,扶搖直上九萬里

          常用鏈接

          統計

          積分與排名

          friends

          link

          最新評論

          Tomcat數據庫連接池 + JavaBean + 分頁技術 + JDBC3.0 + 大型數據庫- -

          主要特色: ?
          1.使用最新的JDBC3.0數據庫驅動。 ?
          2.大幅度減化了JSP的反復調用JavaBean,可以直接寫SQL,無須再使用連接數據庫連接池。 ?
          3.將大量的工作交給JavaBean做,JSP負責頁面控制。 ?
          4.最大特色是極其簡單,程序編寫也極其簡單,非常適合初學者。 ?
          5.使用的是"湯母貓"數據庫連接池,方便快速。 ?
          ?
          《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();} ? ? ?
          } ? ? ?
          } ?
          ?
          ?
          ***************************************《湯母貓中的數據庫連接池的設置》******************************************************************************** ?
          …… ?
          …… ?
          …… ?
          <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>

          posted on 2006-05-25 09:26 liaojiyong 閱讀(369) 評論(0)  編輯  收藏 所屬分類: Java

          主站蜘蛛池模板: 新密市| 离岛区| 盈江县| 广州市| 夹江县| 上林县| 常熟市| 剑川县| 沐川县| 尚义县| 章丘市| 南郑县| 邢台县| 宣恩县| 曲麻莱县| 瓦房店市| 绥芬河市| 上虞市| 万安县| 永修县| 洞头县| 泰来县| 滨海县| 廊坊市| 和顺县| 荥经县| 蒙山县| 六安市| 临城县| 富源县| 张家港市| 永年县| 萨迦县| 虎林市| 门头沟区| 汝南县| 乌什县| 平顺县| 武城县| 夏河县| 沂源县|