複製鏈接
請複製以下鏈接發送給好友

數據源

鎖定
數據源是指數據庫應用程序所使用的數據庫或者數據庫服務器。
數據源(Data Source)顧名思義,數據的來源,是提供某種所需要數據的器件或原始媒體。在數據源中存儲了所有建立數據庫連接的信息。就像通過指定文件名稱可以在文件系統中找到文件一樣,通過提供正確的數據源名稱,你可以找到相應的數據庫連接。
中文名
數據源
外文名
Data Source

目錄

  1. 1 分類
  2. 2 屬性
  3. 3 名稱
  1. 4 數據包
  2. DBCP
  3. C3P0
  1. ODBC

數據源分類

信息系統的數據源必需可靠且具備更新能力,常用的數據源有:①觀測數據,即現場獲取的實測數據,它們包括野外實地勘測、量算數據,台站的觀測記錄數據,遙測數據等。②分析測定數據,即利用物理和化學方法分析測定的數據。③圖形數據,各種地形圖和專題地圖等。④統計調查數據,各種類型的統計報表、社會調查數據等。⑤遙感數據,由地面、航空或航天遙感獲得的數據。中國的數據源數量龐大。如:全國範圍的土地資源清查及詳查數據,航空攝影測量圖像和國土普查衞星資料已覆蓋全國,定位、半定位觀測站網遍佈全國,有地面調查、地圖測繪等大量數據。
上面提到的數據源例子只是很小一部
圖表 圖表
分,事實上數據源可以是任何數據類型。

數據源屬性

1. databaseName String數據庫名稱,即數據庫的SID。
2. dataSourceName String數據源接口實現類的名稱。
3. description String 對數據源的描述。
4. networkProtocol String 和服務器通訊使用的網絡協議名。
5. password String 用户登錄密碼。
6. portNumber數據庫服務器使用的端口。
7. serverName String數據庫服務器名稱。
8. user String 用户登錄名
如果數據是水,數據庫就是水庫,數據源就是連接水庫的管道,終端用户看到的數據集是管道里流出來的水。

數據源名稱

數據源名稱(data source name,DSN)是包含了有關某個特定數據庫信息的數據結構,這個信息是開放式數據庫連接驅動能夠連接到數據庫上必需的信息。DSN存儲在註冊表或作為一個單獨的文本文件,DSN裏面包含的信息有名稱、目錄和數據庫驅動器,以及用户ID和密碼(根據DSN的類型)。開發人員為每個數據庫創建一個獨立的DSN。為了連接到某個數據庫,開發人員需要在程序中指定DSN。相反,沒有DSN的連接則需要在程序中指定所有必要的信息。
有三種類型的DSN:用户DSN(有時也叫作機器DSN)、系統DSN和文件DSN。用户和系統DSN都根據具體計算機而有所不同,DSN信息存儲在註冊表中。用户DSN允許單個用户在單個計算機上訪問數據庫,系統DSN允許在某個計算機上的多個用户訪問數據庫。文件DSN在一個以.DSN擴展名結尾的文本文件中存儲相關信息,並且可以被安裝了相同驅動器的不同計算機上的多個用户共享。
注:DSN也是Deep Space Network太空跟蹤網的縮寫。

數據源數據包

不管通過何種持久化技術,都必須通過數據連接訪問數據庫,在Spring中,數據連接是通過數據源獲得的。在以往的應用中,數據源一般是Web應用服務器提供的。在Spring中,你不但可以通過JNDI獲取應用服務器的數據源,也可以直接在Spring容器中配置數據源,此外,你還可以通過代碼的方式創建一個數據源,以便進行無依賴的單元測試配置一個數據源。
Spring在第三方依賴包中包含了兩個數據源的實現類包,其一是Apache的DBCP,其二是 C3P0。可以在Spring配置文件中利用這兩者中任何一個配置數據源。

數據源DBCP

DBCP類包位於 /lib/jakarta-commons/commons-dbcp.jar,DBCP是一個依賴 Jakarta commons-pool對象池機制的數據庫連接池,所以在類路徑下還必須包括/lib/jakarta- commons/commons-pool.jar。下面是使用DBCP配置MySql數據源的配置片斷:
xml代碼
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3309/sampledb" /> <property name="username" value="root" /> <property name="password" value="1234" /> </bean>
BasicDataSource提供了close()方法關閉數據源,所以必須設定destroy-method=”close”屬性, 以便Spring容器關閉時,數據源能夠正常關閉。除以上必須的數據源屬性外,還有一些常用的屬性:
defaultAutoCommit:設置從數據源中返回的連接是否採用自動提交機制,默認值為 true;
defaultReadOnly:設置數據源是否僅能執行只讀操作, 默認值為 false;
maxActive:最大連接數據庫連接數,設置為0時,表示沒有限制;
maxIdle:最大等待連接中的數量,設置為0時,表示沒有限制;
maxWait:最大等待秒數,單位為毫秒, 超過時間會報出錯誤信息;
validationQuery:用於驗證連接是否成功的查詢SQL語句,SQL語句必須至少要返回一行數據, 如你可以簡單地設置為:“select count(*) from user”;
removeAbandoned:是否自我中斷,默認是 false ;
removeAbandonedTimeout:幾秒後數據連接會自動斷開,在removeAbandoned為true,提供該值;
logAbandoned:是否記錄中斷事件, 默認為 false;

數據源C3P0

C3P0是一個開放源代碼的JDBC數據源實現項目,它在lib目錄中與Hibernate一起發佈,實現了JDBC3和JDBC2擴展規範説明的 Connection 和Statement 池。C3P0類包位於/lib/c3p0/c3p0-0.9.0.4.jar。下面是使用C3P0配置一個 Oracle數據源:
xml代碼
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close"> <property name="driverClass" value=" oracle.jdbc.driver.OracleDriver "/> <property name="jdbcUrl" value=" jdbc:oracle:thin:@localhost:1521:ora9i "/> <property name="user" value="admin"/> <property name="password" value="1234"/> </bean>
ComboPooledDataSource和BasicDataSource一樣提供了一個用於關閉數據源的close()方法,這樣我們就可以保證Spring容器關閉時數據源能夠成功釋放。
C3P0擁有比DBCP更豐富的配置屬性,通過這些屬性,可以對數據源進行各種有效的控制:
acquireIncrement:當連接池中的連接用完時,C3P0一次性創建新連接的數目;
acquireRetryAttempts:定義在從數據庫獲取新連接失敗後重復嘗試獲取的次數,默認為30;
acquireRetryDelay:兩次連接中間隔時間,單位毫秒,默認為1000;
autoCommitOnClose:連接關閉時默認將所有未提交的操作回滾。默認為false;
automaticTestTable: C3P0將建一張名為Test的空表,並使用其自帶的查詢語句進行測試。如果定義了這個參數,那麼屬性preferredTestQuery將被忽略。你 不能在這張Test表上進行任何操作,它將作為C3P0測試所用,默認為null;
breakAfterAcquireFailure:獲取連接失敗將會引起所有等待獲取連接的線程拋出異常。但是數據源仍有效保留,並在下次調 用getConnection()的時候繼續嘗試獲取連接。如果設為true,那麼在嘗試獲取連接失敗後該數據源將申明已斷開並永久關閉。默認為 false;
checkoutTimeout:當連接池用完時客户端調用getConnection()後等待獲取新連接的時間,超時後將拋出SQLException,如設為0則無限期等待。單位毫秒,默認為0;
connectionTesterClassName: 通過實現ConnectionTester或QueryConnectionTester的類來測試連接,類名需設置為全限定名。默認為 com.mchange.v2.C3P0.impl.DefaultConnectionTester;
idleConnectionTestPeriod:隔多少秒檢查所有連接池中的空閒連接,默認為0表示不檢查;
initialPoolSize:初始化時創建的連接數,應在minPoolSize與maxPoolSize之間取值。默認為3;
maxIdleTime:最大空閒時間,超過空閒時間的連接將被丟棄。為0或負數則永不丟棄。默認為0;
maxPoolSize:連接池中保留的最大連接數。默認為15;
maxStatements:JDBC的標準參數,用以控制數據源內加載的PreparedStatement數量。但由於預緩存的Statement屬 於單個Connection而不是整個連接池。所以設置這個參數需要考慮到多方面的因素,如果maxStatements與 maxStatementsPerConnection均為0,則緩存被關閉。默認為0;
maxStatementsPerConnection:連接池內單個連接所擁有的最大緩存Statement數。默認為0;
numHelperThreads:C3P0是異步操作的,緩慢的JDBC操作通過幫助進程完成。擴展這些操作可以有效的提升性能,通過多線程實現多個操作同時被執行。默認為3;
preferredTestQuery:定義所有連接測試都執行的測試語句。在使用連接測試的情況下這個參數能顯著提高測試速度。測試的表必須在初始數據源的時候就存在。默認為null;
propertyCycle: 用户修改系統配置參數執行前最多等待的秒數。默認為300;
testConnectionOnCheckout:因性能消耗大請只在需要的時候使用它。如果設為true那麼在每個connection提交的時候都 將校驗其有效性。建議使用idleConnectionTestPeriod或automaticTestTable
等方法來提升連接測試的性能。默認為false;
testConnectionOnCheckin:如果設為true那麼在取得連接的同時將校驗連接的有效性。默認為false。

數據源ODBC

ODBC(Open Database Connectivity,開放數據庫互連)是微軟公司開放服務結構(WOSA,Windows Open Services Architecture)中有關數據庫的一個組成部分,它建立了一組規範,並提供了一組對數據庫訪問的標準API(應用程序編程接口)。這些API利用SQL來完成其大部分任務。ODBC本身也提供了對SQL語言的支持,用户可以直接將SQL語句送給ODBC。一組數據的位置,可以使用 ODBC驅動程序訪問該位置。