知名百科  > 所屬分類  >  其他科技   

Java數(shù)據(jù)庫連接

Java數(shù)據(jù)庫連接(JDBC)是一個Java應(yīng)用程序編程接口(Java API),用于管理與數(shù)據(jù)庫的連接并執(zhí)行查詢。JDBC面向關(guān)系數(shù)據(jù)庫,并為Java應(yīng)用程序提供數(shù)據(jù)庫連接標(biāo)準(zhǔn)。

JDBC API源于微軟的開放式數(shù)據(jù)庫連接(ODBC)。它是Sun Microsystems為Java語言設(shè)計的處理SQL(結(jié)構(gòu)化查詢語言)的接口。它于1997年作為JDK 1.1的一部分發(fā)布,是為Java語言開發(fā)的最早的庫之一。自發(fā)布以來,JDBC經(jīng)歷了幾個版本的更新和改進,以支持Java平臺和數(shù)據(jù)庫技術(shù)的發(fā)展。JDBC 4.3是2017年9月作為Java SE 9的一部分發(fā)布的最新版本。目前,JDBC API已經(jīng)成為Java應(yīng)用程序連接和訪問數(shù)據(jù)庫的主流技術(shù)之一,并被應(yīng)用到各種框架和工具中。

JDBC API由一組用Java編程語言編寫的接口和類組成。主要的接口和類有:DriverManager類、連接接口、語句接口等。使用這些標(biāo)準(zhǔn)接口和類,程序員可以編寫連接到數(shù)據(jù)庫的應(yīng)用程序,發(fā)送用SQL編寫的查詢并處理結(jié)果。JDBC驅(qū)動程序為特定的DBMS供應(yīng)商實現(xiàn)這些接口和類,可以將其視為Java應(yīng)用程序和所需數(shù)據(jù)庫之間的橋梁。使用JDBC API的Java應(yīng)用程序?qū)⒃趯嶋H連接到數(shù)據(jù)庫之前加載特定DBMS的指定驅(qū)動程序。然后,JDBC驅(qū)動管理器類將把所有JDBC API調(diào)用發(fā)送給加載的驅(qū)動程序,以實現(xiàn)對數(shù)據(jù)庫的連接和訪問。

目錄

發(fā)展歷史 編輯本段

起源

20世紀(jì)80年代,SQL成為關(guān)系數(shù)據(jù)庫管理中廣泛使用的語言。20世紀(jì)90年代,數(shù)據(jù)庫技術(shù)迅速發(fā)展,出現(xiàn)了許多類型和供應(yīng)商的數(shù)據(jù)庫管理系統(tǒng),如Oracle、Sybase、Informix、DB2等。這些數(shù)據(jù)庫管理系統(tǒng)都有自己特定的接口和協(xié)議,這導(dǎo)致了數(shù)據(jù)庫編程的碎片化和不兼容性。為了統(tǒng)一對SQL數(shù)據(jù)庫的訪問,微軟公司于1992年推出了開放式數(shù)據(jù)庫連接(ODBC),這是一種用于連接和操作數(shù)據(jù)庫的通用API。ODBC API是一個獨立于編程語言和數(shù)據(jù)庫系統(tǒng)的ODBC函數(shù)庫。它允許支持ODBC的應(yīng)用程序使用ODBC驅(qū)動程序連接到任何數(shù)據(jù)庫,執(zhí)行SQL語句并獲得結(jié)果。

但是,ODBC API并不直接適用于Java編程語言,因為它使用了C語言的接口。從Java調(diào)用本地C代碼會給應(yīng)用程序的安全性、實現(xiàn)、健壯性和自動移植性帶來一些缺點。而且ODBC的性能很低,依賴于操作系統(tǒng),不支持對象和異常。Java是一種流行的、跨平臺的、面向?qū)ο蟮木幊陶Z言,它需要一種更合適的數(shù)據(jù)庫訪問方法。

為了解決這些問題,太陽微系統(tǒng)公司于1997年專門為Java語言設(shè)計了JDBC API。它是基于Java的數(shù)據(jù)庫訪問接口,允許Java應(yīng)用程序連接到任何支持SQL的數(shù)據(jù)庫。JDBC API借鑒了ODBC的一些設(shè)計思想,也是基于Open Group SQL CLI(調(diào)用級接口)的。但是,JDBC API更適合Java的特點和優(yōu)勢。它使用Java對象和異常機制,并且不依賴于操作系統(tǒng)或數(shù)據(jù)庫供應(yīng)商的API,從而提高了安全性、健壯性和可移植性。Jdbapi因此成為Java語言訪問關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)方式。

發(fā)展

Sun Microsystems于1997年發(fā)布的JDBC 1.0僅支持基本的SQL語句,但不提供高級功能,如事務(wù)控制和結(jié)果集處理。1999年,為了解決效率和穩(wěn)定性問題,JDBC 2.0發(fā)布,增加了高級功能,如批量更新、事務(wù)控制、數(shù)據(jù)源、行集等。JDBC API分為JDBC 2.0核心API(Java . SQL)和JDBC 2.0的JDBC 2.0標(biāo)準(zhǔn)擴展API(javax . SQL)。

2003年,JDBC 3.0發(fā)布,引入了保存點、返回自動生成的密鑰、參數(shù)元數(shù)據(jù)等特性。,以滿足更復(fù)雜和更大規(guī)模的數(shù)據(jù)處理需求。這些特性使Java程序能夠更好地處理分布式和并發(fā)環(huán)境,并提高容錯和恢復(fù)能力。

2006年,JDBC 4.0發(fā)布,它支持Java SE 6的新特性,如注釋、泛型、自動加載驅(qū)動程序等。JDBC 4.0進一步簡化了開發(fā)過程,并通過引入自動加載驅(qū)動程序和增強的連接功能提高了開發(fā)人員的工作效率和應(yīng)用程序的可靠性。這些特性使Java程序更容易與新的數(shù)據(jù)庫技術(shù)和標(biāo)準(zhǔn)集成,例如SQL XML、Blob和Clob的流處理。

2011年,JDBC 4.1發(fā)布,主要是為了支持Java SE 7的新功能,如try-with-resources語句、刪除JDBC-ODBC橋、RowId的生命周期提示等。,這樣Java程序可以更簡潔地管理資源,更方便地訪問本地數(shù)據(jù)庫,更準(zhǔn)確地處理RowId類型。

2014年發(fā)布了JDBC 4.2,它為Java SE 8的新功能提供了支持,例如日期和時間類型、大型對象的流處理、引用游標(biāo)類型等。這些特性使Java程序能夠更好地處理新的數(shù)據(jù)類型和格式。

2017年發(fā)布了JDBC 4.3,它支持Java SE 9的新功能,如模塊化系統(tǒng)、分片API和更多SQL類型。這些特性使Java程序能夠更好地適應(yīng)模塊化開發(fā)模式,更好地支持分布式和水平擴展的數(shù)據(jù)庫,并更好地兼容不同的數(shù)據(jù)庫標(biāo)準(zhǔn)。

狀態(tài)

目前,JDBC在Java平臺和數(shù)據(jù)庫技術(shù)的發(fā)展中發(fā)揮著重要作用,它為Java程序提供了簡單、統(tǒng)一和跨平臺的數(shù)據(jù)庫訪問機制,使得Java程序可以與任何支持SQL的數(shù)據(jù)庫進行通信。JDBC廣泛應(yīng)用于各種Java應(yīng)用程序和框架中,如Spring、Hibernate、JPA等。它在Web開發(fā)、數(shù)據(jù)分析、企業(yè)應(yīng)用、云計算等領(lǐng)域發(fā)揮著重要作用。

程序模型 編輯本段

JDBC API支持兩層和三層客戶-服務(wù)器模式的數(shù)據(jù)庫訪問。

雙層客戶機-服務(wù)器模型

所謂兩層模型是指Java應(yīng)用程序和目標(biāo)數(shù)據(jù)庫分別安裝在兩層組件上。這兩個組成部分是:

應(yīng)用層:安裝在客戶端機器上,包括:

JDBC驅(qū)動程序:用于連接數(shù)據(jù)庫和執(zhí)行SQL語句;

用戶界面:用于與用戶交互和顯示數(shù)據(jù);

Java應(yīng)用:用于實現(xiàn)業(yè)務(wù)邏輯和數(shù)據(jù)處理。

數(shù)據(jù)庫層:安裝在數(shù)據(jù)庫服務(wù)器上,包括:

RDBMS:用于管理和存儲數(shù)據(jù);

數(shù)據(jù)庫:用于存儲特定的數(shù)據(jù)表和記錄。

在兩層客戶機-服務(wù)器模型中,Java應(yīng)用程序直接與數(shù)據(jù)庫通信,這需要一個JDBC驅(qū)動程序,它可以與被訪問的特定數(shù)據(jù)庫進行交互。JDBC驅(qū)動程序?qū)⒂脩舻拿顐鬏數(shù)綌?shù)據(jù)庫或其他數(shù)據(jù)源,并將這些語句的結(jié)果返回給用戶。數(shù)據(jù)庫可以位于另一臺機器上,用戶通過網(wǎng)絡(luò)連接到它。這稱為客戶端-服務(wù)器配置。用戶的機器是客戶端,數(shù)據(jù)庫所在的機器是服務(wù)器。用戶連接到數(shù)據(jù)庫的網(wǎng)絡(luò)可以是內(nèi)部網(wǎng),如公司的內(nèi)部網(wǎng)或互聯(lián)網(wǎng)

三層客戶機-服務(wù)器模型

三層客戶機-服務(wù)器模型是Java數(shù)據(jù)庫應(yīng)用程序的常用體系結(jié)構(gòu),它分為三個組件級別,即客戶機層、應(yīng)用服務(wù)器層和數(shù)據(jù)庫層。這三個級別的組件可以分別安裝在不同的機器上,通過網(wǎng)絡(luò)進行通信和數(shù)據(jù)交換:

客戶端層:用戶和應(yīng)用程序之間的接口,可以是Web瀏覽器、桌面應(yīng)用程序或移動應(yīng)用程序。客戶端層通常包括一些特定于語言的虛擬機,如Java虛擬機或。NET虛擬機,用于運行應(yīng)用程序代碼。客戶端層向應(yīng)用服務(wù)器層發(fā)送數(shù)據(jù)操作請求,如查詢、插入、更新或刪除數(shù)據(jù),然后接收應(yīng)用服務(wù)器層返回的數(shù)據(jù)或結(jié)果并顯示給用戶。

應(yīng)用服務(wù)器層:負(fù)責(zé)處理業(yè)務(wù)邏輯或應(yīng)用邏輯,如驗證用戶身份、計算數(shù)據(jù)、生成報表等。應(yīng)用服務(wù)器層可以使用Java Web應(yīng)用程序或Java Web服務(wù)來實現(xiàn),它們可以運行在Web服務(wù)器上,例如Tomcat或Jetty。應(yīng)用服務(wù)器層包含用于連接數(shù)據(jù)庫和執(zhí)行SQL語句的JDBC API。應(yīng)用服務(wù)器層接收客戶端層的數(shù)據(jù)操作請求,然后根據(jù)請求的內(nèi)容向數(shù)據(jù)庫層發(fā)送相應(yīng)的SQL語句,并將數(shù)據(jù)庫層返回的數(shù)據(jù)或結(jié)果轉(zhuǎn)換為客戶端層可以識別的格式,例如XML或JSON,并將其發(fā)送回客戶端層。

數(shù)據(jù)庫層:負(fù)責(zé)數(shù)據(jù)存儲,包括關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)和數(shù)據(jù)庫。數(shù)據(jù)庫層可以安裝在數(shù)據(jù)庫服務(wù)器上,如MySQL、Oracle或SQL Server。數(shù)據(jù)庫層接收應(yīng)用服務(wù)器層的SQL語句,然后根據(jù)SQL語句的內(nèi)容對數(shù)據(jù)庫執(zhí)行相應(yīng)的操作,例如查詢、插入、更新或刪除數(shù)據(jù),并將操作的結(jié)果或數(shù)據(jù)返回給應(yīng)用服務(wù)器層。

與兩層模型相比,使用三層模型的優(yōu)勢包括:

通過將應(yīng)用服務(wù)器層與數(shù)據(jù)庫層分離,應(yīng)用服務(wù)器層可以并發(fā)處理多個客戶端層的請求,而數(shù)據(jù)庫層可以專注于數(shù)據(jù)管理和存儲,這可以大大提高應(yīng)用程序的性能。

業(yè)務(wù)邏輯與數(shù)據(jù)庫明確分離,應(yīng)用服務(wù)器層可以根據(jù)需求進行修改或更新,而不會影響數(shù)據(jù)庫層的結(jié)構(gòu)和數(shù)據(jù),使應(yīng)用程序更易于維護和擴展;客戶端層可以使用簡單的協(xié)議(如HTTP或SOAP)訪問應(yīng)用服務(wù)器層,而無需了解數(shù)據(jù)庫層的詳細(xì)信息,如數(shù)據(jù)庫的類型、地址、用戶名和密碼,這可以提高客戶端層的安全性和可移植性。

JDBC API

JDBC API定義了程序員用來連接數(shù)據(jù)庫和發(fā)送查詢的Java接口和類。JDBC驅(qū)動程序為特定的DBMS供應(yīng)商實現(xiàn)了這些接口和類。可以說JDBC驅(qū)動程序在Java應(yīng)用程序和所需的數(shù)據(jù)庫之間架起了一座橋梁。使用JDBC API的Java應(yīng)用程序?qū)⒃趯嶋H連接到數(shù)據(jù)庫之前加載特定DBMS的指定驅(qū)動程序。然后,JDBC驅(qū)動管理器類將所有JDBC API調(diào)用發(fā)送給加載的驅(qū)動程序。

根據(jù)不同的配置,JDBC驅(qū)動程序可分為以下四種類型。

JDBC-ODBC橋驅(qū)動程序

JDBC-ODBC橋驅(qū)動程序使用Java的本地方法調(diào)用ODBC驅(qū)動程序,并將JDBC方法調(diào)用轉(zhuǎn)換為ODBC函數(shù)調(diào)用,從而實現(xiàn)與數(shù)據(jù)庫的連接。

優(yōu)勢特點 編輯本段

優(yōu)勢

使用方便;您可以輕松連接到任何數(shù)據(jù)庫。

缺點:由于JDBC方法調(diào)用被轉(zhuǎn)換為ODBC函數(shù)調(diào)用,性能下降;ODBC驅(qū)動程序需要安裝在客戶端計算機上。

注意:在JDBC 4.2中,JDBC-ODBC橋已被刪除。

網(wǎng)絡(luò)協(xié)議全Java驅(qū)動程序

網(wǎng)絡(luò)協(xié)議的完整Java驅(qū)動程序使用中間件(應(yīng)用服務(wù)器)直接或間接將JDBC調(diào)用轉(zhuǎn)換為特定供應(yīng)商的數(shù)據(jù)庫協(xié)議。驅(qū)動程序完全是用Java編寫的。

基于服務(wù)器,客戶端計算機上不需要JDBC驅(qū)動程序代碼;跨平臺,完全Java實現(xiàn),適合網(wǎng)絡(luò)應(yīng)用。

劣勢

需要在服務(wù)器端安裝數(shù)據(jù)庫中間層,增加了網(wǎng)絡(luò)開銷和維護成本。

本地API部分Java驅(qū)動程序

本地API的Java驅(qū)動程序使用數(shù)據(jù)庫供應(yīng)商提供的客戶端庫將JDBC方法調(diào)用轉(zhuǎn)換為數(shù)據(jù)庫API的本地調(diào)用,該調(diào)用并不完全是用Java編寫的。

需要安裝特定于數(shù)據(jù)庫的API在客戶端;不跨平臺,不完全Java實現(xiàn)。本地協(xié)議全Java驅(qū)動程序本地協(xié)議全Java驅(qū)動程序直接將JDBC調(diào)用轉(zhuǎn)換為供應(yīng)商特定的數(shù)據(jù)庫協(xié)議,并且該驅(qū)動程序完全用Java編寫。

鏈接步驟 編輯本段

使用JDBC將Java應(yīng)用程序與數(shù)據(jù)庫連接起來需要五個步驟。這些步驟如下:

注冊驅(qū)動程序

在連接數(shù)據(jù)庫之前,需要為每個數(shù)據(jù)庫加載或注冊一次驅(qū)動程序,以創(chuàng)建與數(shù)據(jù)庫的通信通道。加載驅(qū)動程序有兩種方式:

靜態(tài)注冊:使用class . forname(driverName)的方法,其中driverName是驅(qū)動程序的全限定類名,如com . MySQL . CJ . JDBC . driver;;動態(tài)注冊:使用drivermanager。register driver(driver)方法,其中driver是驅(qū)動程序的實例,例如new com.mysql.jdbc.Driver()。

連接建立

getConnection()方法用于創(chuàng)建一個連接對象,該對象對應(yīng)于與數(shù)據(jù)庫的物理連接。這可以通過兩種方式實現(xiàn):

getconnection(URL,用戶名,密碼):使用三個參數(shù),URL,用戶名和密碼,例如connection conn = driver manager . getconnection(URL,用戶,密碼);

GetConnection(URL):只有一個參數(shù)URL,它包含用戶名和密碼。不同的關(guān)系數(shù)據(jù)庫有不同的JDBC連接字符串,例如Oracle數(shù)據(jù)庫:JDBC: Oracle:瘦:@主機名:端口:服務(wù)名。

執(zhí)行查詢

建立連接后,可以使用Connection類的createStatement方法創(chuàng)建一個Statement對象來執(zhí)行SQL查詢,Statement對象表示SQL語句的接口。例如:statement stmt = conn . create statement()。

創(chuàng)建Statement對象后,使用Statement對象的query方法傳入SQL查詢語句。語句對象有三種查詢方法:execute()、executeQuery()和executeUpdate(),其中executeQuery()方法用于執(zhí)行查詢語句并返回一個ResultSet對象,表示結(jié)果集,例如ResultSet RS = stmt。執(zhí)行查詢。

Java數(shù)據(jù)庫連接Java數(shù)據(jù)庫連接

處理結(jié)果集

當(dāng)使用executeQuery()方法執(zhí)行查詢時,它返回一個代表結(jié)果集的ResultSet對象。然后可以使用ResultSet對象的方法來訪問從數(shù)據(jù)庫中檢索的數(shù)據(jù)。如果使用ResultSet對象的next方法,則遍歷結(jié)果集:while(RS . next()){ }。

關(guān)閉連接

當(dāng)連接、語句或ResultSet對象完成時,調(diào)用其close方法以立即釋放它正在使用的資源。比如依次關(guān)閉結(jié)果集、語句對象和數(shù)據(jù)庫連接對象:RS . close();stmt . close();conn.close()。

這五個步驟只是Java應(yīng)用程序連接數(shù)據(jù)庫的一般步驟。如果需要,可以根據(jù)實際開發(fā)情況連接數(shù)據(jù)庫。例如,如果在注冊驅(qū)動程序之前沒有導(dǎo)入包,可以使用import java.sql*導(dǎo)入java.sql .再舉一個例子,使用try-with-resources語句自動關(guān)閉Connection、ResultSet和Statement類型的資源可以避免顯式連接關(guān)閉步驟并簡化代碼。

執(zhí)行結(jié)果

使用JDBC API執(zhí)行SQL語句可能會返回結(jié)果集、更新計數(shù)或輸出參數(shù)。

SQL查詢結(jié)果集

SQL查詢結(jié)果集對應(yīng)于接口java.sql.result set的實例對象。ResultSet對象通常由Statement、PreparedStatement或CallableStatement對象的executeQuery()或execute()方法返回。ResultSet對象不僅記錄查詢集結(jié)果中的每一行數(shù)據(jù),還記錄每一列的類型信息。ResultSet對象的主要方法如下:

移動光標(biāo)的方法用于移動ResultSet對象的光標(biāo)并指向不同的行,例如next()、previous()、first()、last()方法等等。

獲取列值的方法用于獲取當(dāng)前行某一列的值,這些值將被轉(zhuǎn)換為指定的Java類型,如getString()、getInt()、getBoolean()、getDouble()等。

更新列值的方法用于更新當(dāng)前行中某一列的值,并將這些值設(shè)置為指定的Java類型,如updateString()、updateInt()、updateBoolean()、updateDouble()等。

獲取元數(shù)據(jù)的方法用于獲取結(jié)果集的元數(shù)據(jù),如列的數(shù)量、名稱、類型和長度,如getMetaData()、getRow()、getType()等。

關(guān)閉結(jié)果集的方法,close()方法用于關(guān)閉結(jié)果集并釋放資源。

更新計數(shù)

當(dāng)使用語句或PreparedStatement對象的executeUpdate()方法執(zhí)行update語句時,返回的結(jié)果是一個int值,指示更新的行數(shù),即更新計數(shù)。更新計數(shù)可用于判斷SQL語句是否成功執(zhí)行。

輸出參數(shù)

輸出參數(shù)是一個特殊參數(shù),可用于從存儲過程或函數(shù)而不是結(jié)果集中返回值。通常CallableStatement對象的registerOutParameter()方法輸出參數(shù)的類型和位置,execute()方法執(zhí)行存儲過程或函數(shù),getXXX()方法用于獲取輸出參數(shù)的值,其中XXX表示輸出參數(shù)的數(shù)據(jù)類型,如getInt()、getString()等。

輸出參數(shù)的值可以用于邏輯判斷、統(tǒng)計或顯示,或者作為其他SQL語句的輸入?yún)?shù)。一般來說,如果輸出參數(shù)有值,則意味著執(zhí)行成功;如果輸出參數(shù)沒有值,則意味著執(zhí)行失敗或沒有返回值。

附件列表


0

詞條內(nèi)容僅供參考,如果您需要解決具體問題
(尤其在法律、醫(yī)學(xué)等領(lǐng)域),建議您咨詢相關(guān)領(lǐng)域?qū)I(yè)人士。

如果您認(rèn)為本詞條還有待完善,請 編輯

上一篇 中間件    下一篇 實時操作系統(tǒng)

同義詞

暫無同義詞
主站蜘蛛池模板: 日韩男女做性高清在线观看| 黄瓜视频网站在线观看| 毛片女人毛片一级毛片毛片| 奇米综合四色77777久久| 动漫触手被吸乳羞羞动漫| 两人夜晚打扑克剧烈运动| 美女扒开尿口给男人桶爽视频| 无码精品A∨在线观看无广告| 国产一区二区在线观看app | 七次郎成人免费线路视频| 美女被免费网站在线视| 成人三级在线观看| 免费萌白酱国产一区二区| 一个人看的www在线观看免费 | 欧美成人性动漫在线观看| 久久天天躁狠狠躁夜夜AV浪潮| 国产毛片一级国语版| 极品馒头一线天粉嫩| 久久精品国产四虎| 亚洲春黄在线观看| 国产欧美日韩精品综合 | 久久人人爽人人爽人人片dvd| 韩国一级在线观看| 无码少妇精品一区二区免费动态| 啦啦啦啦在线直播免费播放| а√天堂8资源中文在线| 波多野结衣伦理片在线观看| 国产精品美女视频| 久在线精品视频| 被强制侵犯的高贵冷艳人妇| 成人性生话视频| 伊人亚洲综合青草青草久热| 91亚洲精品第一综合不卡播放| 欧美xxxxbbb| 国产乱子伦真实china| 一边摸下面一别吃奶| 狠狠久久精品中文字幕无码| 国产精品国产三级国产普通话| 久久精品WWW人人爽人人| 美女张开腿黄网站免费| 在线观看精品国产福利片100|