數據源

數據源

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

分類

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

圖表 圖表

上面提到的數據源例子只是很小一部分,事實上數據源可以是任何數據類型。

屬性

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驅動程式訪問該位置。

相關詞條

相關搜尋

熱門詞條

聯絡我們