java數據庫的連接技術(Java DataBase Connectivity),能實現Java程序以各種數據庫的訪問
由一組使用Java語言編寫的類和接口(JDBC API)組成,它java.sql以及javax.sql中
二、JDBC 原理以及驅動程序的分類2.1、JDBC 原理原來的 SUN 公司(現在是Oracle 公司)在開發JDBC API 時,將這些接口和類放在了兩個包中,java.sql 包和javax.sql 包中。而主要的接口和類都是在java.sql 包中,javax 包叫做擴展包,javax.sql 包中有一些關于數據源、連接池和其他的一些擴展的接口和類。JDBC 中最常用的幾個接口和類是 DriverManager 類、Connection 接口、Statement 接口、ResultSet 接口,DriverManager 這個類是管理驅動程序的,可以獲得數據庫連接對象。JDBC的驅動程序是實現了JDBC API 接口的類,由數據庫廠商來提供,所以我們在使用JDBC 連接數據庫的時候,需要導入數據庫的驅動包,連接不同的數據庫,需要導入不同的包。而我們在編寫Java 應用程序時,基本上不用太關心這些包中的類。我們只需要用JDBC 的接口進行編程就可以了,也就是java.sql 包和javax.sql 包中的接口。這些接口的對象都是通過其他對象來獲得的,我們不需要通過new 來創建它們。而這些對象的具體實現都是在驅動程序中實現的,是驅動程序類的對象。
2.2、驅動程序分類通過JDBC-ODBC 橋,開發者可以使用JDBC 來訪問一個ODBC 數據源。JDBC-ODBC 橋驅動程序為Java 應用程序提供了一種把JDBC 調用映射為ODBC 調用的方法。只要本地機裝有相關的ODBC 驅動,那么采用JDBC-ODBC 橋幾乎可以訪問所有的數據庫。但是,由于JDBC-ODBC 先調用ODBC 再由ODBC 去調用本地數據庫接口來訪問數據庫。所以,執行效率比較低,對于那些大數據量存取的應用是不適合的。而且,這種方法要求客戶端必須安裝ODBC 驅動,所以對于基于internet 和intranet 的應用也是不合適的。因為,你不可能要求所有客戶都能找到ODBC 驅動。
使用JDBC-ODBC 進行橋連步驟如下:
1、配置數據源:控制面板→管理工具→ODBC 數據源→系統DSN2、編程,通過橋連方式與數據庫建立連接
2.4、純Java 驅動
純Java 驅動直接把JDBC 調用轉換為符合相關數據庫系統規范的請求。用這種驅動編寫的應用程序可以直接和數據庫服務器通訊。這種類型的驅動完全由Java 實現,因此實現了平臺獨立性。
由于純Java 驅動不需要先把JDBC 的調用傳給ODBC 或本地數據庫接口或者是中間層服務器,而是將JDBC 調用直接轉換為DBMS 所使用的網絡協議,所以它的執行效率是非常高的。這種驅動程序可以動態的被下載。但是它有一個缺點,就是對于不同的數據庫,需要下載不同的驅動程序。
使用純Java 驅動方式進行直連的步驟:1、下載數據庫廠商提供的驅動程序包2、將驅動程序包引入工程中3、編程,通過純Java 驅動方式與數據庫建立連接
要使用 JDBC 連接和操作數據庫,有一套固定的步驟。依照這些步驟,可以保證你正確的連接到數據庫并且操作它。
JDBC 的API 中主要定義了一些連接和操作數據庫的接口,而具體的類卻很少。這是因為,在開發Java 的API 的時候,不可能讓JDBC 連接某個具體的數據庫,而只能確定一組規范。而連接具體數據庫的實現,應該由數據庫的廠商來做。通過統一的JDBC 規范,使得我們在連接各種數據庫的時候,編碼的方式是一樣的,這樣更利于代碼的復用和移植.
從上面JDBC 編程步驟中可以看出,使用JDBC 操作數據庫需要依賴幾個主要的JDBC API,接下來介紹這幾個JDBC API 的使用
4.1、DriverManager 類是用來管理數據庫驅動的java.sql 包中大多數都是接口,這是為數不多的類之一。它是非常常用的一個類,最主要的功能就是獲得數據庫的連接,它定義了三個連接數據庫的方法,差別在參數的數量上。三個參數的getConnection()方法是最常用的。三個參數分別是數據庫的URL、用戶名和密碼。
返回類型 | 方法簽名 | 說明 |
static Connection | getConnection(String url) | 試圖建立到給定數據庫URL 的連接 |
static Connection | getConnection(String url,PRoperties info) | 試圖建立到給定數據庫URL 的連接 |
static Connection | getConnection(String url,String user, String passWord) | 試圖建立到給定數據庫URL 的連接 |
由數據庫廠商來實現,獲得Connection 對象的方法是通過DriverManager 類的getConnection()方法。通過Connection 對象, 我們可以獲得操作數據庫的Statement 、PreparedStatement ,CallableStatement 等對象。這些對象是用來執行SQL 和存儲過程的
4.3、Statement 接口的對象是用來執行SQL 語句的,而且是執行靜態的SQL 語句Statement 接口的對象是用來執行SQL 語句的,而且是執行靜態的SQL 語句。所謂的靜態SQL 語句,是指SQL 語句由一個固定的SQL 字符串確定,運行期不能修改參數
返回類型 | 方法簽名 | 說明 |
int | executeUpdate(String sql) | 執行給定 SQL 語句,該語句可能為 INSERT、UPDATE 或DELETE語句,或者不返回任何內容的 SQL 語句(如 SQL DDL 語句) |
ResultSet | executeQuery(String sql) | 執行給定的 SQL 語句,該語句返回單個 ResultSet 對象 |
void | close() | 立即釋放此 Statement 對象的數據庫和 JDBC 資源,而不是等待該對象自動關閉時發生此操作 |
當我們調用Statement 的executeQuery()方法時,就會得到一個ResultSet 的對象。ResultSet 對象中包含根據查詢語句查詢出來的一個結果集,但是,實際上這些內容還是在數據庫當中,還并沒有真正的取出到虛擬機的內存中。ResultSet 其實是保存了一個指向其當前數據行的游標,我們需要使用ResultSet 的方法讓游標一行一行的向下移動,然后獲取每一行的數據,所以在操作ResultSet 對象期間,數據庫連接不能關閉。
返回類型 | 方法簽名 | 說明 |
boolean | next() | 將CURSOR(游標)從當前位置向前移一行 |
Type | getType(String columnLabel) | 根據數據庫表的列名得到指定列的值 |
Type | getType(intcolumnIndex) | 根據列的序號得到指定列的值,第一列的序號是1。 |
void | close() | 立即釋放此 ResultSet 對象的數據庫和 JDBC 資源,而不是等待該對象自動關閉時發生此操作 |
java.sql
5.1、java.sql描述編程語言訪問并處理存儲在數據源(通常是一個關系數據庫)中的數據的 API。此 API 包括一個框架,憑借此框架可以動態地安裝不同驅動程序來訪問不同數據源。盡管 JDBCTM API 主要用于將 SQL 語句傳遞給數據庫,但它還可以用于以表格方式從任何數據源中讀寫數據。通過接口的 javax.sql.RowSet
組可以使用的 reader/writer 實用程序,可以被定制以使用和更新來自電子表格、純文本文件或其他任何表格式數據源的數據
java.sql
包中包含用于以下方面的 API:
DriverManager
實用程序建立與數據庫的連接DriverManager
類:建立與驅動程序的連接SQLPermission
類:當代碼在 Security Manager(比如 applet)中運行時提供權限,試圖通過 DriverManager
設置一個記錄流Driver
接口:提供用來注冊和連接基于 JDBC 技術(“JDBC 驅動程序”)的驅動程序的 API,通常僅由 DriverManager
類使用DriverPropertyInfo
類:提供 JDBC 驅動程序的屬性,不是供一般用戶使用的Statement
:用于發送基本 SQL 語句PreparedStatement
:用于發送準備好的語句或基本 SQL 語句(派生自 Statement
)CallableStatement
:用于調用數據庫存儲過程(派生自 PreparedStatement
)Connection
接口:提供創建語句以及管理連接及其屬性的方法Savepoint
:在事務中提供保存點ResultSet
接口Array
接口:SQL ARRAY
的映射關系Blob
接口:SQL BLOB
的映射關系Clob
接口:SQL CLOB
的映射關系Date
類:SQL DATE
的映射關系NClob
接口:SQL NCLOB
的映射關系Ref
接口:SQL REF
的映射關系RowId
接口:SQL ROWID
的映射關系Struct
接口:SQL STRUCT
的映射關系SQLxml
接口:SQL XML
的映射關系Time
類:SQL TIME
的映射關系Timestamp
類:SQL TIMESTAMP
的映射關系Types
類:提供用于 SQL 類型的常量SQLData
接口:指定 UDT 到此類的一個實例的映射關系SQLInput
接口:提供用來從流中讀取 UDT 屬性的方法SQLOutput
接口:提供用來將 UDT 屬性寫回流中的方法DatabaseMetaData
接口:提供有關數據庫的信息ResultSetMetaData
接口:提供有關 ResultSet
對象的列的信息ParameterMetaData
接口:提供有關 PreparedStatement
命令的參數的信息SQLException
:由大多數方法在訪問數據出問題時拋出,以及因為其他原因由其他一些方法拋出SQLWarning
:為了指示一個警告而拋出DataTruncation
:為了指示數據可能已經被截斷而拋出BatchUpdateException
:為了指示并不是批量更新中的所有命令都成功執行而拋出JDBC 4.0 API 中引入的 java.sql
和 javax.sql
特性
Class.forName
來加載 java.sql.Driver
類PooledConnection
關聯的 PreparedStatement
已關閉或驅動程序確定為無效時要通知的可用性新聞熱點
疑難解答