在了解JDBC之前呢,我們可以先對ODBC做一個回顧,以便於更好的理解JDBC。看名字也知道這兩個關系不一般,他們實現了同樣的功能,為應用程序連接和操作數據庫提供支持。所以,我們先從ODBC開始。
ODBC(Open Database Connectivity)是開放數據庫互連的簡稱,是一種使用SQL的應用程序接口。它是一系列的規范和對數據庫訪問的API。那麼API+SQL就可以執行對數據庫的操作。它是不依賴於DBMS的,即通過ODBC可以以相同的方式連接大部分數據庫。它包括了應用程序接口、驅動器管理器、數據庫驅動器、數據源。下面我們通過一副圖來了解ODBC各個部分之間的關系:
之前說過了JDBC和ODBC實際上的功能是一致的,只不過實現不太一樣。首先ODBC是基於C++語言的,那麼與Java的面向對象思想不太相符,通信比較困難。因此,JDBC就出項了,即JDBC是基於JAVA語言的數據庫訪問API接口。然後其他內容就和ODBC基本一致了。只要你了解了ODBC,那麼在概念上基本就理解了JDBC。那麼你需要做的就是對新面孔出項的接口再了解一遍就好了,並且這些接口的功能和ODBC是一致的,只是說在實現上有細微的差別。下面也看看JDBC的結構圖:
由上面的結構圖可以看出來,JDBC提供了多種不同的連接方式。這個做個大概的了解吧,因為這主要是數據庫廠商關心的事,我們知道就好了,有些也確實不是很明白。
1、JDBC-ODBC連接橋:這種方式是一位ODBC為基礎的,上面說了java應用程序和ODBC之間的通信是有點麻煩的。但是ODBC作為一種數據庫訪問的標准應用是很廣的。因此JDBC通過映射ODBC的功能調用就保證了原來使用ODBC的數據庫也可以很方便的訪問的。
2、本地API驅動:即把JDBC調用轉換為對數據庫接口的客戶端二進制代碼庫的調用。但是這個接口庫依賴於產商,因為這裡我們調用的不是數據庫廠商提供的JDBC的接口實現。
3、純Java本地協議:即把JDBC調用映射為DBMS的網絡監聽協議的功能調用,監聽程序監聽到請求後執行相關的數據庫操作。監聽程序是由廠商提供的。
關於驅動程序如何注冊的,我們不需要知道。我們需要知道的是,如何調用方法去加載得到數據庫驅動程序就好了。即Class.forName()方法,調用這個方法需要傳遞一個包含該驅動程序類名的String對象作為實參。如下:
Class.forName("oracle.jdbc.driver.OracleDriver")
Connection 加載了驅動程序後,與數據庫建立連接需要調用DriverManager.getConnection()方法,此方法需要數據庫URL作為參數,不同的數據庫URL的有些區別,但都符合“協議名 + Ip地址+端口號+數據庫名”的格式。數據庫用戶名和密碼如果有,也得加上,如下:
String url = "jdbc:oracle:thin:@localhost:1521:pdborcl"; String username = "123"; String password = "123"; Connection conn = DriverManager.getConnection(url, username, password);
StateMent 執行靜態的SQL語句,它還可以組合多個SQL語句成為一個批處理,整體提交給數據庫。我們通過Connection對象來創建Statement對象,然後用Statement的execute方法來執行SQL。另外PreparedStatement對象是繼承自Statement對象的,這裡我們用 PreparedStatement為例,需要注意的是批處理只能用Statement對象來執行。
PreparedStatement pstmt = conn.prepareStatement("select * from t_user where userId=?"); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery();
ResultSet 執行一個SQL查詢之後的結果集,Result具有指向當前行的指針,可以用來讀取結果集中的數據。初始時指針指向第一行前面。該對象的Next()方法可以移動指針。如果Next()之後的行合法返回True,否則False。因此,循環時Next()方法作為判斷依據。
到這裡JDBC的簡單介紹就結束了,JDBC在使用中充當了一個溝通者的角色。這讓我想起姚明在NBA打球的那個設計模式:適配器模式,這也就成就了 Java應用程序跨平台的特性。同時,JDBC、ODBC等也是面向接口編程思想的典型體現。 對了,這裡還缺了一個OLE DB,沒有提及。下回吧…
作者:csdn博客 zhuojiajin