亚洲天堂av网_久久精品欧美一区二区三区不卡_亚洲欧美一级_欧美成人合集magnet

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

Java數據庫連接

Java數據庫連接(JDBC)是一個Java應用程序編程接口(Java API),用于管理與數據庫的連接并執行查詢。JDBC面向關系數據庫,并為Java應用程序提供數據庫連接標準。

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

JDBC API由一組用Java編程語言編寫的接口和類組成。主要的接口和類有:DriverManager類、連接接口、語句接口等。使用這些標準接口和類,程序員可以編寫連接到數據庫的應用程序,發送用SQL編寫的查詢并處理結果。JDBC驅動程序為特定的DBMS供應商實現這些接口和類,可以將其視為Java應用程序和所需數據庫之間的橋梁。使用JDBC API的Java應用程序將在實際連接到數據庫之前加載特定DBMS的指定驅動程序。然后,JDBC驅動管理器類將把所有JDBC API調用發送給加載的驅動程序,以實現對數據庫的連接和訪問。

目錄

發展歷史 編輯本段

起源

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

但是,ODBC API并不直接適用于Java編程語言,因為它使用了C語言的接口。從Java調用本地C代碼會給應用程序的安全性、實現、健壯性和自動移植性帶來一些缺點。而且ODBC的性能很低,依賴于操作系統,不支持對象和異常。Java是一種流行的、跨平臺的、面向對象的編程語言,它需要一種更合適的數據庫訪問方法。

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

發展

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

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

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

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

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

2017年發布了JDBC 4.3,它支持Java SE 9的新功能,如模塊化系統、分片API和更多SQL類型。這些特性使Java程序能夠更好地適應模塊化開發模式,更好地支持分布式和水平擴展的數據庫,并更好地兼容不同的數據庫標準。

狀態

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

程序模型 編輯本段

JDBC API支持兩層和三層客戶-服務器模式的數據庫訪問。

雙層客戶機-服務器模型

所謂兩層模型是指Java應用程序和目標數據庫分別安裝在兩層組件上。這兩個組成部分是:

應用層:安裝在客戶端機器上,包括:

JDBC驅動程序:用于連接數據庫和執行SQL語句;

用戶界面:用于與用戶交互和顯示數據;

Java應用:用于實現業務邏輯和數據處理。

數據庫層:安裝在數據庫服務器上,包括:

RDBMS:用于管理和存儲數據;

數據庫:用于存儲特定的數據表和記錄。

在兩層客戶機-服務器模型中,Java應用程序直接與數據庫通信,這需要一個JDBC驅動程序,它可以與被訪問的特定數據庫進行交互。JDBC驅動程序將用戶的命令傳輸到數據庫或其他數據源,并將這些語句的結果返回給用戶。數據庫可以位于另一臺機器上,用戶通過網絡連接到它。這稱為客戶端-服務器配置。用戶的機器是客戶端,數據庫所在的機器是服務器。用戶連接到數據庫的網絡可以是內部網,如公司的內部網或互聯網

三層客戶機-服務器模型

三層客戶機-服務器模型是Java數據庫應用程序的常用體系結構,它分為三個組件級別,即客戶機層、應用服務器層和數據庫層。這三個級別的組件可以分別安裝在不同的機器上,通過網絡進行通信和數據交換:

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

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

數據庫層:負責數據存儲,包括關系數據庫管理系統(RDBMS)和數據庫。數據庫層可以安裝在數據庫服務器上,如MySQL、Oracle或SQL Server。數據庫層接收應用服務器層的SQL語句,然后根據SQL語句的內容對數據庫執行相應的操作,例如查詢、插入、更新或刪除數據,并將操作的結果或數據返回給應用服務器層。

與兩層模型相比,使用三層模型的優勢包括:

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

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

JDBC API

JDBC API定義了程序員用來連接數據庫和發送查詢的Java接口和類。JDBC驅動程序為特定的DBMS供應商實現了這些接口和類。可以說JDBC驅動程序在Java應用程序和所需的數據庫之間架起了一座橋梁。使用JDBC API的Java應用程序將在實際連接到數據庫之前加載特定DBMS的指定驅動程序。然后,JDBC驅動管理器類將所有JDBC API調用發送給加載的驅動程序。

根據不同的配置,JDBC驅動程序可分為以下四種類型。

JDBC-ODBC橋驅動程序

JDBC-ODBC橋驅動程序使用Java的本地方法調用ODBC驅動程序,并將JDBC方法調用轉換為ODBC函數調用,從而實現與數據庫的連接。

優勢特點 編輯本段

優勢

使用方便;您可以輕松連接到任何數據庫。

缺點:由于JDBC方法調用被轉換為ODBC函數調用,性能下降;ODBC驅動程序需要安裝在客戶端計算機上。

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

網絡協議全Java驅動程序

網絡協議的完整Java驅動程序使用中間件(應用服務器)直接或間接將JDBC調用轉換為特定供應商的數據庫協議。驅動程序完全是用Java編寫的。

基于服務器,客戶端計算機上不需要JDBC驅動程序代碼;跨平臺,完全Java實現,適合網絡應用。

劣勢

需要在服務器端安裝數據庫中間層,增加了網絡開銷和維護成本。

本地API部分Java驅動程序

本地API的Java驅動程序使用數據庫供應商提供的客戶端庫將JDBC方法調用轉換為數據庫API的本地調用,該調用并不完全是用Java編寫的。

需要安裝特定于數據庫的API在客戶端;不跨平臺,不完全Java實現。本地協議全Java驅動程序本地協議全Java驅動程序直接將JDBC調用轉換為供應商特定的數據庫協議,并且該驅動程序完全用Java編寫。

鏈接步驟 編輯本段

使用JDBC將Java應用程序與數據庫連接起來需要五個步驟。這些步驟如下:

注冊驅動程序

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

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

連接建立

getConnection()方法用于創建一個連接對象,該對象對應于與數據庫的物理連接。這可以通過兩種方式實現:

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

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

執行查詢

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

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

Java數據庫連接Java數據庫連接

處理結果集

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

關閉連接

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

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

執行結果

使用JDBC API執行SQL語句可能會返回結果集、更新計數或輸出參數。

SQL查詢結果集

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

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

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

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

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

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

更新計數

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

輸出參數

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

輸出參數的值可以用于邏輯判斷、統計或顯示,或者作為其他SQL語句的輸入參數。一般來說,如果輸出參數有值,則意味著執行成功;如果輸出參數沒有值,則意味著執行失敗或沒有返回值。

附件列表


0

詞條內容僅供參考,如果您需要解決具體問題
(尤其在法律、醫學等領域),建議您咨詢相關領域專業人士。

如果您認為本詞條還有待完善,請 編輯

上一篇 中間件    下一篇 實時操作系統

同義詞

暫無同義詞
亚洲天堂av网_久久精品欧美一区二区三区不卡_亚洲欧美一级_欧美成人合集magnet
99综合视频| 久久免费国产精品| 欧美日韩国产色视频| 亚洲欧美日韩视频二区| 亚洲破处大片| 激情一区二区三区| 国产视频久久久久| 一区二区三区在线观看视频 | 国产日韩av一区二区| 欧美日韩成人免费| 欧美不卡在线| 欧美va日韩va| 欧美激情久久久久| 欧美激情成人在线| 欧美成人午夜| 欧美黑人在线观看| 模特精品裸拍一区| 免费欧美日韩| 欧美大片专区| 欧美日韩精品中文字幕| 欧美日本一区二区视频在线观看| 欧美成人综合| 欧美日韩国产美女| 欧美先锋影音| 国产欧美日韩激情| 国产亚洲观看| 影音先锋日韩有码| 亚洲国产老妈| 亚洲人午夜精品| 亚洲人成77777在线观看网| 亚洲国产精品久久久久久女王| 极品尤物久久久av免费看| 伊人一区二区三区久久精品| 在线观看国产成人av片| 亚洲精品视频在线观看免费| aa成人免费视频| 欧美破处大片在线视频| 欧美视频中文在线看| 国产日韩成人精品| 亚洲国产高清aⅴ视频| 亚洲精品国精品久久99热| 在线亚洲伦理| 欧美主播一区二区三区美女 久久精品人 | 国产日韩欧美在线| 韩日在线一区| 亚洲国产精品第一区二区| 亚洲精品少妇网址| 午夜精品一区二区三区电影天堂 | 一本大道久久a久久精二百| 亚洲综合精品一区二区| 久久久久久日产精品| 欧美精品综合| 国产亚洲一二三区| 亚洲国产日韩欧美在线动漫| 在线视频你懂得一区| 久久国产视频网| 欧美激情精品久久久久久变态| 欧美日韩免费一区二区三区视频| 国产精品网站在线| 最新国产成人av网站网址麻豆| 中文一区在线| 欧美成人情趣视频| 国产欧美日韩精品在线| 亚洲美女毛片| 蜜臀久久99精品久久久久久9| 国产精品高潮在线| 99国产精品| 欧美成年人网| 精品动漫3d一区二区三区| 亚洲专区欧美专区| 欧美午夜精品久久久久久久| 亚洲国产免费看| 久久国产综合精品| 国产日韩av高清| 欧美一区在线看| 国产精品一区二区久激情瑜伽| 亚洲免费激情| 欧美日韩高清不卡| 99热精品在线观看| 欧美 日韩 国产在线| 精品福利av| 新狼窝色av性久久久久久| 欧美日韩日本国产亚洲在线| 亚洲国产精品久久91精品| 久久久夜夜夜| 在线播放豆国产99亚洲| 亚洲欧美日韩一区二区| 欧美日韩精品在线视频| 亚洲美女av电影| 久久激情综合网| 国产精品视频| 亚洲精品视频在线播放| 亚洲一区三区视频在线观看| 久久综合一区二区| 国产精品乱码一区二三区小蝌蚪 | 欧美日韩岛国| 国产精品久久久久久久午夜| 亚洲美女毛片| 欧美一区午夜精品| 久久在线免费| 国产精品一香蕉国产线看观看 | 国产在线一区二区三区四区| 亚洲一区二区三区欧美| 久久精品二区三区| 麻豆精品精华液| 欧美另类在线观看| 日韩午夜精品视频| 亚洲欧洲日产国码二区| 久久精品视频导航| 欧美日韩一区二区三区在线视频| 国产精品乱看| 国产欧美日韩一区二区三区在线| 亚洲一区综合| 久久米奇亚洲| 欧美日韩成人免费| 午夜精品影院| 免费欧美在线| 国产精品毛片a∨一区二区三区| 亚洲永久在线| 激情五月综合色婷婷一区二区| 日韩一级片网址| 欧美一区二区在线| 亚洲福利视频网| 久久噜噜噜精品国产亚洲综合| 欧美系列精品| 亚洲第一久久影院| 国产精品福利av| 99re6这里只有精品| 久久久久久久久久久一区| 亚洲片国产一区一级在线观看| 午夜在线精品| 国产精品你懂的| 国产精品一级二级三级| 欧美成人亚洲成人日韩成人| 国产一区激情| 久久国产天堂福利天堂| 一本色道综合亚洲| 欧美全黄视频| **网站欧美大片在线观看| 18成人免费观看视频| 欧美性一二三区| 亚洲性色视频| 国产精品老牛| 欧美日韩视频专区在线播放 | 亚洲人成人一区二区三区| 亚洲欧美日韩区| 国产亚洲欧美中文| 欧美中文字幕在线观看| 欧美电影打屁股sp| 在线电影国产精品| 久久久久久九九九九| 国产午夜精品全部视频播放 | 欧美激情一区二区| 欧美激情一区二区久久久| 亚洲国产一二三| 欧美mv日韩mv国产网站app| 欧美一区二区三区的| 国产精品外国| 欧美一级视频一区二区| 亚洲视频碰碰| 国产精品大片wwwwww| 亚洲一区二区动漫| 亚洲日本中文| 欧美成人精品在线观看| 亚洲国产一区二区三区高清| 欧美成人黄色小视频| 欧美亚洲综合另类| 一区二区视频免费完整版观看| 免费人成网站在线观看欧美高清| 欧美成人激情在线| 久久综合久久综合这里只有精品| 极品日韩久久| 欧美日韩播放| 欧美日产在线观看| 亚洲免费在线精品一区| 国产色综合久久| 国产亚洲欧洲一区高清在线观看| 久久久综合香蕉尹人综合网| 亚洲国产美女| 99精品国产热久久91蜜凸| 国产精品婷婷| 欧美福利一区二区三区| 欧美国产日韩精品| 性久久久久久久| 亚洲国产一区二区三区青草影视 | 久久影院午夜论| 亚洲第一精品影视| 亚洲精品一区在线| 亚洲美女av网站| 国产日韩在线一区| 欧美另类视频在线| 久久国产精品黑丝| 一区二区三区日韩在线观看| 久久大逼视频| 欧美激情一区二区三区成人| 亚洲黄色免费| 性欧美xxxx视频在线观看| 欧美精品三级| 国产精品视频网| 国产欧美韩国高清|