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