jdbc(java database connectivity)時用于運作sql的解決方案,開發人員使用jdbc的标準接口,資料庫廠商則對接口進行實作,這樣開發人員就可以無需接觸底層資料庫驅動程式的差異性。
廠商在實作jdbc驅動程式時,依方式可将驅動程式分為四種類型:
jdbc-odbc bridge driver
将jdbc調用轉換為odbc調用
native api driver
将jdbc調用轉換為原生連結庫中的相關api調用。特點:與平台相依,是四種類型中最快的驅動程式。
jdbc-net driver
将jdbc調用轉換為特定的網絡協定調用,目的是與遠端資料庫特定的中間伺服器或元件進行協定操作,而中間件或組建再真正與資料庫進行操作。特點:彈性最高。
native protocol driver
主要作用是将jdbc調用轉換為特定的網絡協定,是以驅動驅動程式可以使用java技術來實作,遺傳你這類型的驅動程式可以跨平台,在性能上也有不錯的表現。在不需要如第3種驅動類型的靈活性時,通常是會使用這類型驅動程式,該類型時最常見的驅動程式類型。
以下編寫一個簡單的javabean來測試可否連接配接資料庫:
之後就可以通過調用isconnectedok()方法來看看是否可以連接配接成功。例如,可以寫個簡單的jsp網頁,代碼如下:
在java ee中的環境中,将取得連接配接等與資料庫來源相關的行為規範在<code>javax.sql.datasource</code>接口,實際如何取得connection則由實作接口的對象來負責。
為了讓應用程式在需要取得某些與系統相關的資源對象時,能與實際的系統配置、實體機器位置、環境架構等無關,在java應用程式中可以通過jndi(java naming directory interface)來取得所需的資源對象。可用如下方式取得datasource執行個體:
在建立context對象的過程中會收集環境的相關資料,之後根據jndi名稱jdbc/demo向jndi伺服器查找datasource執行個體并傳回。在這個程式片段中,不會知道實際的資源配置、實體機器位置、環境架構等資訊,應用程式不會與這些相依。
之前的dbbean類可以改為如下編寫方式:
以上代碼并不含有驅動程式、資料庫使用者名、密碼等資訊,這些都由資料庫管理人員或伺服器管理人員負責設定,我們唯一需要知道的就是jdbc/test這個jndi名稱,并且告訴web容器,也就是要在web.xml中設定。
web.xml:
在web.xml中設定的目的,就是讓web容器提供jndi查找時所需的相關環境資訊,這樣建立context對象時就不用設定一大堆參數了。接着可以編寫一個簡單的jsp來使用databasebean。
對于java開發人員來說,它的工作已經完成了。現在假設你是伺服器管理者,職責就是設定jndi相關資源,但設定的方式并非标準的一部分,而是依應用程式伺服器而有所不同。假設應用程式将部署在tomcat6上,則可以要求web應用程式在封裝為war檔案時,必須在meta-inf檔案夾中包括一個context.xml檔案。例如:
name屬性用來設定jndi名稱,username與password用來設定資料庫使用者名和密碼,driverclassname用來設定驅動程式類名稱,url用來設定jdbc url。其他屬性則是與dbcp(database connection pool)有關的,這是内置在tomcat中的連接配接池機制。
當應用程式部署後,tomcat會根據meta-inf中context.xml的設定,尋找指定的驅動程式,是以必須将驅動程式的jar檔案放置在tomcat的lib目錄中,接着tomcat就會為jndi名稱jdbc/demo設定相關的資源。
使用root來操作資料庫是不安全的,root賬号用于操作資料庫的完整權限,應用設定具有适當權限的使用者來操作資料庫。