第16讲:ODBCJDBC简介
一、ODBC簡介
1. ODBC的概念
? ? ①ODBC:Open DataBase Connection,即開放數據庫連接
? ? ②ODBC是一種標準,它規定了不同語言的應用程序與不同數據庫服務器之間通訊的方式
? ? ③ODBC包含一組API,用于實現應用程序與數據庫服務器的交互,應用程序通過調用API,完成下列功能:
- 連接數據庫服務器
- 向數據庫服務器發送SQL命令
- 一條一條地提取數據庫檢索結果中的元組,并傳遞給應用程序中的變量
? ? ④具體的DBMS提供一套驅動程序(Driver庫函數),供ODBC調用,以便實現應用程序與數據庫的連接
? ? ⑤ODBC可以配合許多高級語言來使用,如C、C++、C#、Visual Basic、Power-Builder等
?
2. ODBC在數據庫系統中扮演哪種角色
? ??
? ? ①有了ODBC,應用程序員編寫DBAP時就無需針對特定的DBMS,因為ODBC對應用程序員提供了統一的接口
? ? ②對于不同的DBMS,ODBC通過不同的驅動程序(Driver庫函數)將程序員的代碼解釋成各DBMS可以理解的SQL語句
? ? ③當應用程序調用ODBC API時,ODBC API會調用具體DBMS Driver庫函數,DBMS Driver庫函數則與數據庫服務器通訊,執行相應的請求動作并返回檢索結果
?
3. 應用程序如何通過ODBC連接到數據庫服務器
? ? ①ODBC應用前,需要確認具體DBMS Driver被安裝到ODBC環境中
? ? ②ODBC應用程序首先要分配一個SQL環境,再產生一個數據庫連接句柄
? ? ③應用程序使用SQLConnect(),打開一個數據庫連接,SQLConnect()的具體參數如下:
- connection handle:連接句柄
- the server:要連接的數據庫服務器
- the user identifier:用戶
- password:密碼
- SQL_NTS類型說明前面的參數是空終止的字符串
?
4. 應用程序如何通過ODBC與數據庫服務器進行通訊
? ? ①應用程序使用SQLExecDirect()向數據庫發送SQL命令
? ? ②應用程序使用SQLFetch()獲取產生的結果元組
? ? ③應用程序使用SQLBindCol()綁定C語言變量與結果中的屬性:當獲取一個元組時,屬性值會自動地傳送到相應的C語言變量中
? ? ④SQLBindCol()的參數包含:
- ODBC定義的stmt變量,查詢結果中的屬性位置
- SQL到C的類型變換,變量的地址
- 對于類似字符數組一樣的可變長度類型,應給出①變量的最大長度;②當獲取到一個元組后,實際長度的存儲位置
5. ODBC具備的其他功能
? ? ①動態SQL語句的預編譯-動態參數傳遞功能
? ? ②獲取元數據特性:發現數據庫中的所有關系的特性以及發現每一個查詢結果的列的名字和類型等
? ? ③默認每一條SQL語句都被作為一個獨立地能夠自動提交的事務來處理
- 應用程序可以關閉一個連接的自動提交特性:SQLSetConnectOption(conn, SQL_AUTOCOMMIT, 0)
- 此時事務就需要顯式地給出提交和撤消的命令:SQLTransact(conn, SQL_COMMIT/ROLLBACK)
?
二、JDBC簡介
1. JDBC的概念
? ? ①JDBC:Java DataBase Connection
? ? ②JDBC是一組Java版本的API,規定了Java應用程序與數據庫服務器之間通訊的方式
? ? ③JDBC API分為兩個程序包
- java.sql 核心API:J2SE的一部分,使用java.sql.DriverManager類、 java.sql.Driver類和java.sql.Connection接口連接到數據庫
- java.sql 可選擴展API:J2EE的一部分,包含了基于JNDI的資源,以及管理連接池、分布式事務等,使用DataSource接口連接到數據庫
?
2. JDBC的核心類
- java.sql.DriverManager:處理驅動的調入并且對產生新數據庫連接提供支持
- java.sql.Driver:通過驅動進行數據庫訪問,連接到數據庫的應用程序必須具備該數據庫的特定驅動
- java.sql.Connection:代表對特定數據庫的連接
- java.sql.Statement:對特定的數據庫執行SQL語句
- java.sql.PreparedStatement:用于執行預編譯的SQL語句
- java.sql.CallableStatement:用于執行對數據庫內嵌過程的調用
- java.sql.ResultSet:從當前執行的SQL語句中返回結果數據
- try{...} catch{...}:異常捕獲及其處理
?
3. Java程序使用JDBC API訪問數據庫的過程
概述:打開一個連接;創建Statement對象,并設置查詢語句;使用Statement對象執行查詢,發送查詢給數據庫服務器和返回結果給應用程序。
? ? ①加載數據庫驅動,傳遞一個Driver給DriverManager
- Class.forName()
? ? ②建立數據庫連接,通過URL得到一個Connection對象
- DriverManager.getConnection(sDBUrl)
- DriverManager.getConnection(sDBUrl,sDBUserID,sDBPassword)
? ? ③查詢或修改數據庫,創建一個Statement對象
- Statement stmt=con.createStatement()
? ? ④查詢返回一個ResultSet
- ResultSet rs=stmt.executeQuery(sSQL)
?
三、嵌入式SQL & ODBC & JDBC 在執行SQL語句上的異同
1. 執行過程
? ? ①嵌入式SQL:語句形式執行
? ? ②ODBC:API形式執行,所有對數據庫的操作都變成了一個個函數,通過調用函數來讓DBMS執行SQL語句
? ? ③JDBC:API形式執行,以語句對象為中心
?
四、基于ODBC/JDBC的數據庫訪問
1. 沒有ODBC/JDBC的數據庫訪問:不同DBMS的嵌入式SQL語句不同,應用程序員編寫的DBAP可能只適用于某一個DBMS
?
2. 基于ODBC/JDBC的數據庫訪問:ODBC/JDBC提供了統一的API,讓應用程序員以對象為單位操縱數據庫
?
轉載于:https://www.cnblogs.com/xzxl/p/10832961.html
總結
以上是生活随笔為你收集整理的第16讲:ODBCJDBC简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Red Hat Enterprise L
- 下一篇: Webpack核心概念解析