資源描述:
《用jsp訪問(wèn)電子商務(wù)網(wǎng)站數(shù)據(jù)庫(kù) 》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫(kù)。
1、用JSP訪問(wèn)電子商務(wù)網(wǎng)站數(shù)據(jù)庫(kù)[摘要]高效的icrosoftSQLServer,MySQL和MSAccess等各種數(shù)據(jù)庫(kù)。 JavaBean技術(shù)是一種可重復(fù)使用且跨平臺(tái)的軟件組件,它為軟件開發(fā)者提供了一種極佳的解決方案,使他們可以利用JavaBean技術(shù)封裝事務(wù)邏輯,很好地實(shí)現(xiàn)業(yè)務(wù)邏輯和客戶端操作的分離,使系統(tǒng)具有更好的靈活性和適用性。其工作原理是將數(shù)據(jù)庫(kù)的基本操作邏輯封裝在JavaBean包中,通過(guò)JSP調(diào)用JavaBean來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的連接。首先將用Java編寫的數(shù)據(jù)庫(kù)連接和對(duì)數(shù)據(jù)庫(kù)的基本操作的程序編譯,生成*.class文件,然后就可以通過(guò)J
2、SP調(diào)用JavaBean來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的操作。使用JavaBean提高了代碼的重用程度,簡(jiǎn)化了程序設(shè)計(jì)的復(fù)雜度?! ?.連接池技術(shù) 雖然JDBC(JavaBean)作為一種數(shù)據(jù)庫(kù)訪問(wèn)技術(shù)具有諸多優(yōu)點(diǎn),但在電子商務(wù)網(wǎng)站中,當(dāng)有大量的用戶同時(shí)訪問(wèn)時(shí),采用此種技術(shù)反而會(huì)使系統(tǒng)性能下降。為了解決這一問(wèn)題,在JSP中,把連接池技術(shù)和JDBC(JavaBean)結(jié)合起來(lái)使用?! ∵B接池(ConnectionPool)就是眾多連接對(duì)象的“緩沖存儲(chǔ)池”,也就是連接對(duì)象的集合體。連接池負(fù)責(zé)管理數(shù)據(jù)庫(kù)連接的建立、釋放和調(diào)度。事前連接池先建立若干個(gè)連接,放置在內(nèi)存對(duì)象
3、中,當(dāng)有數(shù)據(jù)庫(kù)訪問(wèn)請(qǐng)求時(shí),不需要執(zhí)行連接數(shù)據(jù)庫(kù)的操作,只需從連接池的空閑隊(duì)列中取用連接;數(shù)據(jù)庫(kù)訪問(wèn)完成后,將連接放回連接池中,供其他數(shù)據(jù)庫(kù)操作時(shí)復(fù)用連接池中的連接。應(yīng)用連接池技術(shù)極大地減少了連接和關(guān)閉數(shù)據(jù)庫(kù)的操作,非常顯著地提高了系統(tǒng)性能。 三、連接池實(shí)例 本例建立的數(shù)據(jù)庫(kù)連接池,可以高效地實(shí)現(xiàn)多用戶并發(fā)對(duì)數(shù)據(jù)庫(kù)的訪問(wèn),數(shù)據(jù)庫(kù)使用的是Oracle?! ublicclassMyConPool{ privateStringdriver="oracle.jdbc.driver.OracleDriver"; privateStringurl
4、="jdbc:oracle:thin:DBServer:1521:OraDB"; privateStringuser=""; privateStringpass=3;//連接池初始化時(shí)的連接數(shù) privateintincrementConNum=2; publicintActiveCon=0;//當(dāng)前正使用的連接數(shù) publicVectorPool=nepleDateFormatformatter=nepleDateFormat("yyyy-MM-ddHH:mm:ss"); java.util.DatecurrentTime-1=nee=
5、formatter.format(currentTime-1); //初始化initiateConNum個(gè)數(shù)據(jù)庫(kù)連接 publicsynchronizedvoidinitiatePool(){ addConnection(initiateConNum); }//獲得數(shù)據(jù)庫(kù)連接 publicsynchronizedConnectiongetConnection()throentAt(0); //取連接池中空閑連接 Pool.removeElementAt(0); …//判斷連接的有效性 } elseif(ActiveConConMa
6、x){ addConnection(incrementConNum); conn=getConnection(); } elseif(ActiveCon==ConMax){ returnConnection((Connection)Pool.firstElement()); conn=getConnection(); } …//判斷conn是否為空,若不空則ActiveCon加1 return(conn);} //創(chuàng)建新的數(shù)據(jù)庫(kù)連接 privateConnectioncreateConnection(){ Connection
7、conn=null; conn=DriverManager.getConnection(url,user,pass個(gè)空閑連接 publicsynchronizedvoidaddConnection(intconnum){ … for(inti=0;iconnum;i){ Connectionconn=createConnection(); if(conn!=null) Pool.addElement(conn);}//初始化了的連接保存到連接池中 … } //釋放一個(gè)數(shù)據(jù)庫(kù)連接,并把該連接保存到連接池中 publicsynchr
8、onizedvoidreturnConnection(Connectionconn){ Pool.addE