- 搞定J2EE核心技術與企業應用
- 常建功 王向華編著
- 2429字
- 2018-12-29 13:50:09
7.3 各種驅動程序實例
通過前面講解的內容可以知道JDBC程序分為Java到數據庫協議、Java到本地API、JDBC-ODBC橋和Java到網絡協議,關于JDBC程序的工作原理如圖7.13所示。

圖7.13 JDBC的工作原理
7.3.1 利用Java到數據庫協議方式連接數據庫
當利用Java到數據庫協議方式來操作數據庫時,會利用數據庫相關的協議把對驅動程序的請求直接發送給數據庫,該協議實際上就是包含在驅動程序中純Java類。
本小節將演示如何利用oracle:thin子協議來操作Oracle數據庫,具體步驟如下:
01 配置開發環境,引入與Oracle數據庫相對應的JDBC。首先復制對應的驅動程序,然后在Package Explorer視圖中用鼠標右鍵單擊jdbc項目,在彈出的快捷菜單中選擇“Paste”,就完成了環境的配置。
02 連接和操作Oracle數據庫,文件JDBCTest.java通過oracle:thin子協議顯示出Oracle數據庫中的employee表格中的數據,具體內容如下:
//******* JDBCTest.java ************** public static void main(String[] args) { try{ Class.forName("oracle.jdbc.driver.OracleDriver"); //加載JDBC驅動 //連接數據庫 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost: 1521:orcl","scott","root"); Statement stmt=conn.createStatement(); //獲取陳述對象 //獲取結果集 ResultSet rs = stmt.executeQuery("select * from employee"); System.out.println("記錄內容:"); System.out.println("\tID號\t姓名\t電話號碼" ); //遍歷結果集 while(rs.next()){ System.out.print("\t" + rs.getInt(1)); System.out.print("\t" + rs.getString(2)); System.out.println("\t" + rs.getInt(3)); System.out.println(); } rs.close(); stmt.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } }
代碼說明:
當程序通過DriverManager.getConnection()方法連接Oracle數據庫時,其參數jdbc:oracle:thin:@localhost:1521:orcl中使用的子協議名為oracle:thin,子名稱中localhost為主機名、1521為Oracle服務器端口號、orcl為數據庫名。
03 編譯和運行該程序后,結果如圖7.14所示。

圖7.14 運行結果
7.3.2 利用Java到本地API方式連接數據庫
當利用Java到本地API方式來操作數據庫時,首先會通過調用本地的API(數據庫客戶端提供的API)連接到相應數據庫客戶端,然后再通過該客戶端連接到相對應的數據庫。在具體編寫代碼時,只需把調用驅動程序的代碼轉換成調用本地API的代碼即可。
本小節將演示如何利用OCI(Oracle Call Interface)子協議來操作Oracle數據庫,所謂OCI方式就是應用程序先連接Oracle數據庫的客戶端,然后在通過該客戶端連接數據庫,因此該方式屬于Java到本地API方式,具體步驟如下:
01 Oracle客戶端配置,該功能可以通過3種方式來實現:利用客戶端工具Net Configuration Assistant;利用Net Manager圖形化工具或修改“tnsnames.ora”數據庫配置文件。
下面將通過Net Configuration Assistant工具來實現本地Net服務名配置,首先打開Net Configuration Assistant工具,在該工具的歡迎界面(如圖7.15所示)中選擇“本地Net服務名配置”單選按鈕,單擊“下一步”按鈕,進入“服務名配置”對話框(如圖7.16所示),在該對話中選擇“添加”單選按鈕,單擊“下一步”按鈕,進入“服務名配置,服務名”對話框(如圖7.17所示),在該對話框中需要為服務名選項填寫安裝Oracle服務器的時產生的SID(系統標識號),然后單擊“下一步”按鈕,進入“服務名配置,請選擇協議”對話框(如圖7.18所示),在該對話框中保持默認設置,單擊“下一步”按鈕,進入“服務名配置,TCP/IP協議”對話框(如圖7.19所示),在該對話框中需要對主機和端口號進行設置,該項目因為在本地計算機上所以填寫的是“127.0.0.1”,所以這里端口號保持默認即可。至此,基本完成Oracle客戶端配置,對于其他的對話框保持默認即可。

圖7.15 歡迎界面

圖7.16 服務名配置

圖7.17 添加服務名

圖7.18 選擇協議

圖7.19 配置協議
02 連接和操作Oracle數據庫,文件OCITest.java通過OCI子協議顯示出Oracle數據庫中的employee表格中的數據,具體內容如下所示。
//******* OCITest.java ************** public class OCITest{ public static void main(String args[]){ try{ Class.forName("oracle.jdbc.driver.OracleDriver"); //加載驅動 //連接數據庫 Connection conn = DriverManager.getConnection("jdbc:oracle:oci:@orcl","scott","root"); Statement stmt=conn.createStatement(); //獲取陳述對象 //獲取運行結果 ResultSet rs = stmt.executeQuery("select * from guestbook"); System.out.println("記錄內容:"); System.out.println("\tID號\t姓名\t電話號碼" ); while(rs.next()){ System.out.print("\t" + rs.getInt(1)); System.out.print("\t" + rs.getString(2)); System.out.println("\t" + rs.getInt(3)); System.out.println(); } rs.close(); stmt.close(); conn.close(); }catch(Exception e){ e.printStackTrace(); } } }
代碼說明:
當程序通過DriverManager.getConnection()方法連接Oracle數據庫時,其參數“jdbc:oracle:oci:@orcl”中使用的子協議名為oracle:oci,子名稱中@后面必須為剛才配置好的本地Net服務名。
03 該程序如果想運行成功,必須要加入與Oracle數據庫相對應的JDBC驅動程序。編譯和運行該程序后,其運行結果如圖7.20所示。

圖7.20 運行結果
7.3.3 利用JDBC-ODBC方式連接數據庫
當利用JDBC-ODBC橋驅動程序來操作數據庫時,該驅動程序并不是直接操作數據庫驅動程序,而是調用JDBC-ODBC橋驅動程序操作ODBC驅動程序,進而連接各種數據庫。其詳細過程是:應用程序中調用JDBC-ODBC橋驅動程序的指令在“驅動管理器”的中轉下交由JDBC-ODBC橋驅動程序處理,經過處理后這些指令格式就會轉成ODBC的指令格式。這些指令會自動通過ODBC的驅動程序來利用底層相應的數據庫驅動程序來訪問對應數據庫,具體過程如圖7.21所示。

圖7.21 JDBC-ODBC橋驅動程序使用
注意:對于開發人員來說,圖7.21中最后3步是由Windows系統自動封裝成為ODBC數據源,不需要進行相應的編程。
下面將演示如何利用JDBC-ODBC橋驅動程序操作數據庫,具體步驟如下:
01 創建ODBC數據源,微軟的Windows系統全方位支持ODBC數據源。首先通過雙擊管理工具中“數據源(ODBC)”圖標打開ODBC數據源管理器(如圖7.22所示)。然后在“用戶DSN”標簽中單擊“添加”按鈕,打開“創建新數據源”對話框(如圖7.23所示),在該對話框中為操作的數據源選擇相對應的驅動程序,因為該項目操作Excel,所以選擇了“Driver do Microsoft Excel(*.xls)”選項。接著單擊“完成”按鈕就會出現關于ODBC Microsoft Excel安裝的對話框,在該對話框中除了要自己定義一個數據源名外,還需要通過“選擇工作簿”按鈕來設置數據源Excel的路徑,設置結果如圖7.24所示。最后單擊“確定”按鈕返回ODBC數據源管理器(如圖7.25所示),在該對話框中多出了一個名為“ExcelTest”的數據源記錄。至此,ODBC數據源就創建成功了。

圖7.22 ODBC數據源管理器

圖7.23 創建數據源

圖7.24 ODBC Microsoft Excel安裝

圖7.25 ODBC數據源管理器
02 連接和操作ODBC數據源,文件JDBC_ODBCTest.java通過JDBC-ODBC橋驅動程序來顯示Excel表格中的數據,具體內容如下:
//******* JDBC_ODBCTest.java ************** import java.sql.*; public class JDBC_ODBCTest{ public static void main(String args[]){ String drv="sun.jdbc.odbc.JdbcOdbcDriver"; //創建驅動連接字符串 try{ Class.forName(drv); //加載驅動 //獲取連接 Connection con = DriverManager.getConnection("jdbc:odbc:ExcelTest", "", ""); Statement stmt=con.createStatement(); //獲取陳述對象 ResultSet rs=stmt.executeQuery("select * from [Sheet1$]"); System.out.println("記錄內容:"); System.out.println("\tID號\t姓名\t電話號碼" ); while(rs.next()){ System.out.print("\t" + rs.getInt(1)); System.out.print("\t" + rs.getString(2)); System.out.print("\t" + rs.getInt(3)); System.out.println(); } rs.close(); stmt.close(); con.close(); }catch(Exception e){ e.printStackTrace(); } } }
代碼說明:
● 當程序通過Class.forName()方法加載驅動程序類時,其參數必須為sun.jdbc.odbc.JdbcOdbcDriver,即JDBC-ODBC橋驅動程序。
● 當程序通過DriverManager.getConnection()方法連接ODBC數據源時,其第一個參數中協議與子協議名必須為jdbc和odbc,而子名稱是確定的必須為ExcelTest數據源名。第二個和第三個參數用來設置用戶名和密碼,當它們為空時可以設置為空字符串。
注意:在早期由于經常會使用JDBC-ODBC橋驅動程序操作數據庫,所以Sun公司在JDK中就提供了JDBC-ODBC橋驅動程序,因此在程序中不需要加入JDBC-ODBC橋驅動程的架包。
03 編譯和運行該程序后,其運行結果如圖7.26所示。

圖7.26 運行結果
- 現代測控系統典型應用實例
- 三菱FX3U/5U PLC從入門到精通
- 空間機器人遙操作系統及控制
- 手把手教你玩轉RPA:基于UiPath和Blue Prism
- Mobile DevOps
- 電腦上網直通車
- Python Data Science Essentials
- 大數據處理平臺
- Apache Superset Quick Start Guide
- 基于Xilinx ISE的FPAG/CPLD設計與應用
- Practical Big Data Analytics
- 貫通Java Web開發三劍客
- 網絡安全技術及應用
- 中國戰略性新興產業研究與發展·智能制造裝備
- Building a BeagleBone Black Super Cluster