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