官术网_书友最值得收藏!

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 運行結果

主站蜘蛛池模板: 平乐县| 萍乡市| 伊川县| 贵阳市| 色达县| 郴州市| 临武县| 兴和县| 原平市| 福鼎市| 封丘县| 兴城市| 天气| 祁阳县| 延寿县| 达州市| 密山市| 横山县| 铁力市| 天等县| 青铜峡市| 洪雅县| 桐庐县| 自治县| 新巴尔虎左旗| 射阳县| 上思县| 东莞市| 永仁县| 探索| 萝北县| 五大连池市| 南部县| 许昌县| 奉贤区| 太仓市| 松桃| 祁连县| 遂宁市| 绵竹市| 屏山县|