Java數(shù)據(jù)庫(kù)連接,(Java Database Connectivity,簡(jiǎn)稱(chēng)JDBC)是Java語(yǔ)言中用來(lái)規(guī)范客戶(hù)端程序如何來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序接口,提供了諸如查詢(xún)和更新數(shù)據(jù)庫(kù)中數(shù)據(jù)的方法。JDBC也是Sun Microsystems的商標(biāo)1。它JDBC是面向關(guān)系型數(shù)據(jù)庫(kù)的。
JDBC驅(qū)動(dòng)程序共分四種類(lèi)型:
類(lèi)型1JDBC-ODBC橋
這種類(lèi)型的驅(qū)動(dòng)把所有JDBC的調(diào)用傳遞給ODBC,再讓后者調(diào)用數(shù)據(jù)庫(kù)本地驅(qū)動(dòng)代碼(也就是數(shù)據(jù)庫(kù)廠(chǎng)商提供的數(shù)據(jù)庫(kù)操作二進(jìn)制代碼庫(kù),例如Oracle中的oci.dll)。
類(lèi)型2本地API驅(qū)動(dòng)
這種類(lèi)型的驅(qū)動(dòng)通過(guò)客戶(hù)端加載數(shù)據(jù)庫(kù)廠(chǎng)商提供的本地代碼庫(kù)(C/C++等)來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù),而在驅(qū)動(dòng)程序中則包含了Java代碼。
類(lèi)型3網(wǎng)絡(luò)協(xié)議驅(qū)動(dòng)
這種類(lèi)型的驅(qū)動(dòng)給客戶(hù)端提供了一個(gè)網(wǎng)絡(luò)API,客戶(hù)端上的JDBC驅(qū)動(dòng)程序使用套接字(Socket)來(lái)調(diào)用服務(wù)器上的中間件程序,后者在將其請(qǐng)求轉(zhuǎn)化為所需的具體API調(diào)用。
類(lèi)型4本地協(xié)議驅(qū)動(dòng)
這種類(lèi)型的驅(qū)動(dòng)使用Socket,直接在客戶(hù)端和數(shù)據(jù)庫(kù)間通信。
JDBC API主要位于JDK中的java.sql包中(之后擴(kuò)展的內(nèi)容位于javax.sql包中),主要包括(斜體代表接口,需驅(qū)動(dòng)程序提供者來(lái)具體實(shí)現(xiàn)):
DriverManager:負(fù)責(zé)加載各種不同驅(qū)動(dòng)程序(Driver),并根據(jù)不同的請(qǐng)求,向調(diào)用者返回相應(yīng)的數(shù)據(jù)庫(kù)連接(Connection)。Driver:驅(qū)動(dòng)程序,會(huì)將自身加載到DriverManager中去,并處理相應(yīng)的請(qǐng)求并返回相應(yīng)的數(shù)據(jù)庫(kù)連接(Connection)。Connection:數(shù)據(jù)庫(kù)連接,負(fù)責(zé)與進(jìn)行數(shù)據(jù)庫(kù)間通訊,SQL執(zhí)行以及事務(wù)處理都是在某個(gè)特定Connection環(huán)境中進(jìn)行的??梢援a(chǎn)生用以執(zhí)行SQL的Statement。Statement:用以執(zhí)行SQL查詢(xún)和更新(針對(duì)靜態(tài)SQL語(yǔ)句和單次執(zhí)行)。PreparedStatement:用以執(zhí)行包含動(dòng)態(tài)參數(shù)的SQL查詢(xún)和更新(在服務(wù)器端編譯,允許重復(fù)執(zhí)行以提高效率)。CallableStatement:用以調(diào)用數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程。SQLException:代表在數(shù)據(jù)庫(kù)連接的建立和關(guān)閉和SQL語(yǔ)句的執(zhí)行過(guò)程中發(fā)生了例外情況(即錯(cuò)誤)。
數(shù)據(jù)類(lèi)型的映射
SQL類(lèi)型 | Java類(lèi)型 |
---|---|
CHAR | java.lang.String |
VARCHAR | java.lang.String |
LONGVARCHAR | java.lang.String |
NUMERIC | java.math.BigDecimal |
DECIMAL | java.math.BigDecimal |
BIT | boolean |
TINYINT | byte |
SMALLINT | short |
INTEGER | int |
BIGINT | long |
REAL | float |
FLOAT | double |
DOUBLE | double |
BINARY | byte[] |
VARBINARY | byte[] |
LONGVARBINARY | byte[] |
DATE | java.sql.Date |
TIME | java.sql.Time |
TIMESTAMP | java.sql.Timestamp |
BLOB | java.sql.Blob |
CLOB | java.sql.Clob |
Array | java.sql.Array |
REF | java.sql.Ref |
Struct | java.sql.Struct |
注:這種類(lèi)型匹配不是強(qiáng)制性標(biāo)準(zhǔn),特定的JDBC廠(chǎng)商可能會(huì)改變這種類(lèi)型匹配。例如Oracle中的DATE類(lèi)型是包含時(shí)分秒,而java.sql.Date僅僅支持年月日。
下面羅列了各種數(shù)據(jù)庫(kù)使用JDBC連接的方式:
⒈O(jiān)racle8/8i/9i數(shù)據(jù)庫(kù)(thin模式)
⒉DB2數(shù)據(jù)庫(kù)
⒊Sql Server7.0/2000數(shù)據(jù)庫(kù)
⒋Sybase數(shù)據(jù)庫(kù)
⒌Informix數(shù)據(jù)庫(kù)
⒍MySQL數(shù)據(jù)庫(kù)
⒎PostgreSQL數(shù)據(jù)庫(kù)
⒏access數(shù)據(jù)庫(kù)直連用ODBC的
當(dāng)訪(fǎng)問(wèn)一個(gè)遠(yuǎn)程數(shù)據(jù)庫(kù)時(shí),JDBC將利用Internet文件的編址方案和一個(gè)看起來(lái)很像網(wǎng)頁(yè)地址(統(tǒng)一資源定位器URL)的文件名。
JDBC為程序員指定了一組在編寫(xiě)SQL請(qǐng)求時(shí)使用的面向?qū)ο蟮念?lèi)。還有一組附加的類(lèi)描述了JDBC驅(qū)動(dòng)API。能映射成Java數(shù)據(jù)類(lèi)型的最普通的SQL數(shù)據(jù)類(lèi)型都是支持的。這個(gè)API提供了微軟事務(wù)服務(wù)器請(qǐng)求的執(zhí)行支持以及提交和回滾到事務(wù)開(kāi)始的能力。
聯(lián)系客服