Ⅰ 連接池是什麼 是JDBC
資料庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對資料庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。資料庫連接池正是針對這個問題提出來的。資料庫連接池負責分配、管理和釋放資料庫連接,它允許應用程序重復使用一個現有的資料庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的資料庫連接來避免因為沒有釋放資料庫連接而引起的資料庫連接遺漏。這項技術能明顯提高對資料庫操作的性能。
在Java中開源的資料庫連接池有以下幾種 :
1, C3P0 C3P0是一個開放源代碼的JDBC連接池,它在lib目錄中與Hibernate一起發布,包括了實現jdbc3和jdbc2擴展規范說明的Connection 和Statement 池的DataSources 對象。
2,Proxool 這是一個Java sql Driver驅動程序,提供了對你選擇的其它類型的驅動程序的連接池封裝。可以非常簡單的移植到現存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為你現存的JDBC驅動程序增加連接池功能。
3,Jakarta DBCP DBCP是一個依賴Jakarta commons-pool對象池機制的資料庫連接池.DBCP可以直接的在應用程序用使用。
4,DDConnectionBroker DDConnectionBroker是一個簡單,輕量級的資料庫連接池。
5,DBPool DBPool是一個高效的易配置的資料庫連接池。它除了支持連接池應有的功能之外,還包括了一個對象池使你能夠開發一個滿足自已需求的資料庫連接池。
6,XAPool XAPool是一個XA資料庫連接池。它實現了javax.sql.XADataSource並提供了連接池工具。
7,Primrose Primrose是一個Java開發的資料庫連接池。當前支持的容器包括Tomcat4&5,Resin3與JBoss3.它同樣也有一個獨立的版本可以在應用程序中使用而不必運行在容器中。Primrose通過一個web介面來控制SQL處理的追蹤,配置,動態池管理。在重負荷的情況下可進行連接請求隊列處理。
8,SmartPool SmartPool是一個連接池組件,它模仿應用伺服器對象池的特性。SmartPool能夠解決一些臨界問題如連接泄漏(connection leaks),連接阻塞,打開的JDBC對象如Statements,PreparedStatements等. SmartPool的特性包括支持多個pools,自動關閉相關聯的JDBC對象, 在所設定time-outs之後察覺連接泄漏,追蹤連接使用情況, 強制啟用最近最少用到的連接,把SmartPool"包裝"成現存的一個pool等。
9,MiniConnectionPoolManager MiniConnectionPoolManager是一個輕量級JDBC資料庫連接池。它只需要Java1.5(或更高)並且沒有依賴第三方包。
10,BoneCP BoneCP是一個快速,開源的資料庫連接池。幫你管理數據連接讓你的應用程序能更快速地訪問資料庫。比C3P0/DBCP連接池快25倍。
Ⅱ 資料庫連接池與JDBC的區別
jdbc是提供給java訪問資料庫的連接方式,在任何時候都可以創建,而在實際應用中,因為創建連接和銷毀連接都會有系統(創建時間、內存等)的損耗,為了減少這種損耗,在系統啟動時就創建一定數量的jdbc連接,在需要使用時派發一個連接,使用完以後收回,而不再需要臨時創建,那麼這些jdbc連接就統稱為資料庫連接池。
Ⅲ 為什麼會出現JDBC連接池的問題
你指的是JDBC連接池連接超時失效問題的問題吧?
這是因為mysql默認保持連接的時間是8小時,如果這個連接在8小時內無人訪問的話,就會關閉這個連接。但是連接池設計的時候沒有考慮到這個問題,還把失效的連接拿出去就會導致出現異常。
解決方法:
1、創建一個線程每隔一段時間就測試一下連接,保持連接時最新的,永遠達不到8小時無人訪問。
2、連接池取連接的時候判定是否這個連接有效。
[java]view plain
if(conn.isValid(1000)){
returnconn;
}
else{
returnthis.CreateConnection();
}
3、不使用連接池,直接拿了就用,用了就還。
Ⅳ 簡述jdbc為什麼要使用連接池
JDBC訪問一般分為如下流程:1、載入JDBC驅動程序:在連接資料庫之前,首先要載入想要連接的資料庫的驅動到JVM(Java虛擬機),這通過java.lang.Class類的靜態方法forName(StringclassName)實現。例如:try{//載入MySql的驅動類Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){System.out.println("找不到驅動程序類,載入驅動失敗!");e.printStackTrace();}成功載入後,會將Driver類的實例注冊到DriverManager類中。2、提供JDBC連接的URL連接URL定義了連接資料庫時的協議、子協議、數據源標識。書寫形式:協議:子協議:數據源標識協議:在JDBC中總是以jdbc開始子協議:是橋連接的驅動程序或是資料庫管理系統名稱。數據源標識:標記找到資料庫來源的地址與連接埠。例如:(MySql的連接URL)jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=gbk;useUnicode=true:表示使用Unicode字元集。如果characterEncoding設置為gb2312或GBK,本參數必須設置為true。characterEncoding=gbk:字元編碼方式。3、創建資料庫的連接要連接資料庫,需要向java.sql.DriverManager請求並獲得Connection對象,該對象就代表一個資料庫的連接。使用DriverManager的getConnectin(Stringurl,Stringusername,Stringpassword)方法傳入指定的欲連接的資料庫的路徑、資料庫的用戶名和密碼來獲得。例如://連接MySql資料庫,用戶名和密碼都是rootStringurl="jdbc:mysql://localhost:3306/test";Stringusername="root";Stringpassword="root";try{Connectioncon=DriverManager.getConnection(url,username,password);}catch(SQLExceptionse){System.out.println("資料庫連接失敗!");se.printStackTrace();}4、創建一個Statement要執行SQL語句,必須獲得java.sql.Statement實例,Statement實例分為以下3種類型:1、執行靜態SQL語句。通常通過Statement實例實現。2、執行動態SQL語句。通常通過PreparedStatement實例實現。3、執行資料庫存儲過程。通常通過CallableStatement實例實現。具體的實現方式:Statementstmt=con.createStatement();PreparedStatementpstmt=con.prepareStatement(sql);CallableStatementcstmt=con.prepareCall("{CALLdemoSp(?,?)}");5、執行SQL語句Statement介面提供了三種執行SQL語句的方法:executeQuery、executeUpdate和execute1、ResultSetexecuteQuery(StringsqlString):執行查詢資料庫的SQL語句,返回一個結果集(ResultSet)對象。2、intexecuteUpdate(StringsqlString):用於執行INSERT、UPDATE或DELETE語句以及SQLDDL語句,如:CREATETABLE和DROPTABLE等3、execute(sqlString):用於執行返回多個結果集、多個更新計數或二者組合的語句。具體實現的代碼:ResultSetrs=stmt.executeQuery("SELECT*FROM");introws=stmt.executeUpdate("INSERTINTO");booleanflag=stmt.execute(Stringsql);6、處理結果兩種情況:1、執行更新返回的是本次操作影響到的記錄數。2、執行查詢返回的結果是一個ResultSet對象。ResultSet包含符合SQL語句中條件的所有行,並且它通過一套get方法提供了對這些行中數據的訪問。使用結果集(ResultSet)對象的訪問方法獲取數據:while(rs.next()){Stringname=rs.getString("name");Stringpass=rs.getString(1);//此方法比較高效(列是從左到右編號的,並且從列1開始)}7、關閉JDBC對象操作完成以後要把所有使用的JDBC對象全都關閉,以釋放JDBC資源,關閉順序和聲明順序相反:1、關閉記錄集2、關閉聲明3、關閉連接對象if(rs!=null){//關閉記錄集try{rs.close();}catch(SQLExceptione){e.printStackTrace();}}if(stmt!=null){//關閉聲明try{stmt.close();}catch(SQLExceptione){e.printStackTrace();}}if(conn!=null){//關閉連接對象try{conn.close();}catch(SQLExceptione){e.printStackTrace();}}
Ⅳ JDBC資料庫連接池問題
1.可以
2.可以
3.如果都用一個Connection,並發怎麼辦,事物怎麼處理?
4.同上
5.(DBCP,C3P0)只是連接池,關閉連接是在程序中控制的。如果是用spring是在請求結束時spring自動關閉的。
6.不是,連接池的作用就是close連接是不close物理連接。
7.連接池是web應用層面東西。在Web伺服器都關了,連接池就沒有了啊。
8.同上。
9.「關閉全部連接」有語義歧義。