亚洲av色香蕉一区二区三区,十四以下岁毛片带血a级,亚洲 校园 欧美 国产 另类,亚洲av日韩av一区谷露,色欲av无码一区二区三区
注冊
|
提交需求
|
訂閱
|
English
首 頁
解決方案
產(chǎn) 品
服 務(wù)
支 持
EDN系統(tǒng)
成功案例
關(guān)于我們
聯(lián)系我們
樹結(jié)構(gòu)圖
EDN系統(tǒng)
圖形圖像
網(wǎng)絡(luò)安全
項目專題
WEB開發(fā)
辦公系列
操作系統(tǒng)
數(shù)據(jù)庫
程序設(shè)計
TOP 10
在Foxmail中如何使…
Ftp 子命令
BigDecimal
MSN在線客服功能模塊使…
會員卡使用方法說明
DataInputStr…
留言板功能說明
CScript
BufferedInpu…
設(shè)置打印機
您現(xiàn)在的位置:
>
技術(shù)沙龍
>
程序設(shè)計
>
Java
>
未分類
>
小談JDBC中的連接與連接池
相關(guān)軟件
>
小談JDBC中的連接與連接池
創(chuàng)建者:
webmaster
更新時間:
2005-05-16
22:15
對于java使用者來說,操作數(shù)據(jù)庫JDBC連ODBC是十分常
用的方法。在基于JDBC的應(yīng)用當中,許多工作都是圍繞java。
sql。Connection接口展開的。做任何數(shù)據(jù)庫操作之前,應(yīng)用必
須創(chuàng)建一個數(shù)據(jù)庫Connection,此連接則相當于應(yīng)用和數(shù)據(jù)庫之
間的一個信息通道,承載應(yīng)用發(fā)送的SQL語句及數(shù)據(jù)庫返回的結(jié)
果。Connection會與一個數(shù)據(jù)庫用戶賬戶相關(guān)聯(lián),從而使得數(shù)據(jù)
庫能夠?qū)νㄟ^Conection提交的SQL語句施加一些訪問控制規(guī)則。
最后,Conection還是數(shù)據(jù)庫事務(wù)的邊界。只有通過同一個
Connection執(zhí)行的SQL語句才能組成一個事務(wù)。事務(wù)由多條SQL語
句組成,這些SQL語句要么全部成功,要么作為一個原子操作全
部失敗。同過調(diào)用Connection方法,可以提交事務(wù),也可以回滾
事務(wù)。
在一個獨立的應(yīng)用中,Connection通常只創(chuàng)建一次,而
且在應(yīng)用關(guān)閉前一直保持打開。獨立的應(yīng)用一次僅為一個用戶提
供服務(wù),而由一個用戶所啟動的所有數(shù)據(jù)庫操作通常會相互關(guān)聯(lián)
。在一個服務(wù)器應(yīng)用中,如果它要處理來自多個不同的用戶的彼
此無關(guān)的請求,處理連接就沒有那么顯而易見了。在此需要考慮
的是:Connection的創(chuàng)建相當?shù)暮馁M時間,一次只能用于一個用
戶以避免事務(wù)崩潰,而要保持連接打開其代價也很大。
創(chuàng)建Connection的實際操作需要大概花費1-2秒。除了
與數(shù)據(jù)庫建立一個網(wǎng)絡(luò)連接之外,數(shù)據(jù)庫引擎必須對數(shù)據(jù)庫用戶
進行鑒別,并創(chuàng)建一個包含各種數(shù)據(jù)結(jié)構(gòu)的上下文來跟蹤記錄事
務(wù)、所緩存的語句、結(jié)果等等。若為服務(wù)器接收到的每個請求都
創(chuàng)建一個Connection,盡管實現(xiàn)簡單,但是對于大流量的服務(wù)器
應(yīng)用來說,卻要花費太多的時間。
要使創(chuàng)建連接所需要的時間盡可能減少,一直方法就是
為每個需要訪問數(shù)據(jù)庫的Servlet或JSP頁面維護一個Connection
。Connection可以在初始化web資源的時候創(chuàng)建,并保存在一個
實例變量中,直到應(yīng)用關(guān)閉??梢园l(fā)現(xiàn),基于這種方法部署一個
應(yīng)用的時候,將會導致大量多線程問題。每個請求都作為一個單
獨的線程通過同一個Servlet或JSP頁面執(zhí)行。有些JDBC驅(qū)動程序
根本不支持多線程訪問同一個Connection,這就帶來了各種各樣
的運行時錯誤。還有一些JDBC驅(qū)動程序通過將所有調(diào)用串行化來
支持多線程訪問同一連接,這又會帶來擴展性差的問題。這種方
法還存在一個嚴重的問題,即來自多個用戶的請求都使用同樣的
Connection,這樣就會在同一個事務(wù)中操作。如果一個請求回滾
,那么就可能導致同一Connection的所有
其他
數(shù)據(jù)庫操作都要回
滾。
從服務(wù)器資源(內(nèi)參)的角度看,保持連接打開代價也
很高。許多 商業(yè)數(shù)據(jù)庫產(chǎn)品使用的許可證都是基于同時打開的
連接數(shù)來定價,因此即便是從實際的花銷上來看,連接也是很昂
貴的。由此看來,盡量減少應(yīng)用所需的連接數(shù)的確是一個明智之
舉。相應(yīng)于“每一個資源一個Connection”的做法,還有一種方
法是在接收第一個請求的時候為每一個用戶創(chuàng)建一個Connection
,并將其作為一個會話作用域?qū)ο?。不過,這種方法有一個缺點
,即Connection可能在大多數(shù)時間內(nèi)處于未激活狀態(tài),因為用戶
在做下一個請求之前需要一定的時間來查看前一個請求的結(jié)果。
最好的做法是使用一個連接池。連接池包含一些
Connection對象,這些對象由所有Servlet和JSP頁面所共享。對
于每個請求,會從池中選出一個Connection,使用后再將其放回
池中。使用連接池即可解決其他做法所存在的問題:
如,創(chuàng)建連接相當耗費時間
置于池中的Connection僅創(chuàng)建一次,然后會得到重用。
大多數(shù)池實現(xiàn)都允許指定開始時Connection對象的起始數(shù),還可
以指定最大連接對象數(shù)??梢愿鶕?jù)需要創(chuàng)建新的Connection對象
,直到達到最大數(shù)為止。一旦達到了最大連接數(shù),池的客戶等待
一個現(xiàn)有的Connection對象重新可用,而不會創(chuàng)建一個新的連接
對象。
對于共享連接存在多線程問題
利用池,每個請求都會得到其自己的Connection,因此
一次僅由一個線程使用,從而消除了所有潛在的多線程問題。
連接是有限資源
利用池,每個Connection都將得到高效使用。只要有未
處理的請求,Connection就不會空閑。連接池允許指定
Connection對象的最大數(shù),還可以將同時連接數(shù)的許可證限制與
可接受的響應(yīng)時間加以權(quán)衡。
不過,連接池并不是萬能的。因為所有用戶都使用同樣
的Connection,因此不能依賴于數(shù)據(jù)庫引擎逐個的限制用戶對受
保護資源的訪問。相反,必須按腳色來定義數(shù)據(jù)訪問規(guī)則,所謂
角色就是有相同訪問權(quán)限的用戶組。然后可以對不同角色使用不
同的池,每個池利用數(shù)據(jù)庫帳戶(對應(yīng)角色)來創(chuàng)建Connection
對象。
相關(guān)文章
前一則:
Java參數(shù)傳遞的一些心得
后一則:
Hibernate獲得成功的十大理由
本頁查看次數(shù):
公司公告
|
客戶調(diào)查
|
法律聲明
|
誠聘英才
|
給我們投稿
|
繁
閃
頭像
京ICP備05031245號
Copyright @ REDCOME.com ALL Rights Reserved
北京怡康軟件科技有限公司 地址:北京市昌平區(qū)東小口立湯路188號北方明珠大廈1號樓2708 郵編:102218 電話:84909966 傳真:84909900 QQ:335601661