JDBC入門

持久化

持久化是指將數(shù)據(jù)存儲(chǔ)到可永久保存的存儲(chǔ)設(shè)備中。持久化的主要應(yīng)用場(chǎng)景是將內(nèi)存中的對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)、XML數(shù)據(jù)文件或其他種類的磁盤文件中。

同時(shí),持久" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

15158846557 在線咨詢 在線咨詢
15158846557 在線咨詢
所在位置: 首頁(yè) > 營(yíng)銷資訊 > 網(wǎng)站運(yùn)營(yíng) > Java Web開(kāi)發(fā)實(shí)戰(zhàn)—JDBC基礎(chǔ)—JDBC入門

Java Web開(kāi)發(fā)實(shí)戰(zhàn)—JDBC基礎(chǔ)—JDBC入門

時(shí)間:2023-05-24 05:36:02 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)

時(shí)間:2023-05-24 05:36:02 來(lái)源:網(wǎng)站運(yùn)營(yíng)

Java Web開(kāi)發(fā)實(shí)戰(zhàn)—JDBC基礎(chǔ)—JDBC入門:




JDBC入門

持久化

持久化是指將數(shù)據(jù)存儲(chǔ)到可永久保存的存儲(chǔ)設(shè)備中。持久化的主要應(yīng)用場(chǎng)景是將內(nèi)存中的對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)、XML數(shù)據(jù)文件或其他種類的磁盤文件中。

同時(shí),持久化也是將程序數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)之間轉(zhuǎn)換的機(jī)制,它的出現(xiàn)是為了彌補(bǔ)計(jì)算機(jī)內(nèi)存的缺陷,這可以從以下兩個(gè)方面理解。

l 內(nèi)存掉電后數(shù)據(jù)會(huì)丟失,但有些數(shù)據(jù)是無(wú)論如何都不能丟失的,比如銀行賬號(hào)、交易信息等,這些數(shù)據(jù)需要存儲(chǔ)到可永久保存的存儲(chǔ)設(shè)備中。

l 內(nèi)存過(guò)于昂貴,與磁盤、光盤相比,內(nèi)存的價(jià)格要高很多,而且維持成本較高,因此,內(nèi)存資源是相對(duì)稀缺的。在程序的運(yùn)行過(guò)程中,因?yàn)閮?nèi)存容量限制,一些數(shù)據(jù)需要被持久化到外部存儲(chǔ)設(shè)備中。

持久化有多種實(shí)現(xiàn)形式,在Java編程中,常見(jiàn)的持久化方式是將程序產(chǎn)生的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,而JDBC則是實(shí)現(xiàn)這一過(guò)程的重要工具。

JDBC的概念

JDBC是Java DataBase Connectivity(Java數(shù)據(jù)庫(kù)連接)的簡(jiǎn)寫,它是一套用于執(zhí)行SQL語(yǔ)句的Java API,由一組用Java語(yǔ)言編寫的類和接口組成,是Java程序訪問(wèn)數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)規(guī)范。

通過(guò)JDBC提供的API,應(yīng)用程序可以連接到數(shù)據(jù)庫(kù),并使用SQL語(yǔ)句完成對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的插入、刪除、更新、查詢等操作,如圖1.1所示。有了JDBC,開(kāi)發(fā)人員無(wú)須為訪問(wèn)不同的數(shù)據(jù)庫(kù)而編寫不同的應(yīng)用程序,只需要使用JDBC編寫一個(gè)通用程序即可。




圖1.1 JDBC訪問(wèn)數(shù)據(jù)庫(kù)

應(yīng)用程序在使用JDBC訪問(wèn)特定的數(shù)據(jù)庫(kù)時(shí),需要與不同的數(shù)據(jù)庫(kù)驅(qū)動(dòng)進(jìn)行連接。JDBC提供接口,而驅(qū)動(dòng)是接口的實(shí)現(xiàn),沒(méi)有驅(qū)動(dòng)將無(wú)法完成數(shù)據(jù)庫(kù)連接。每個(gè)數(shù)據(jù)庫(kù)提供商都需要提供自己的驅(qū)動(dòng),用來(lái)連接本公司的數(shù)據(jù)庫(kù),如圖1.2所示。




圖1.2 通過(guò)數(shù)據(jù)庫(kù)驅(qū)動(dòng)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接

JDBC的體系結(jié)構(gòu)

JDBC具有自身獨(dú)特的體系結(jié)構(gòu),具體如圖1.3所示。




圖1.3 JDBC的體系結(jié)構(gòu)

從圖1.3中可以看出,JDBC的體系結(jié)構(gòu)由三層組成,具體如下。

l JDBC API:面向程序,供Java程序開(kāi)發(fā)人員使用。

l JDBC Driver Manager:注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng),供Java程序開(kāi)發(fā)人員使用。

l JDBC Driver API:面向數(shù)據(jù)庫(kù),供數(shù)據(jù)庫(kù)廠商使用。

其中,JDBC API通過(guò)Driver Manager(驅(qū)動(dòng)管理器)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的透明連接,提供獲取數(shù)據(jù)庫(kù)連接、執(zhí)行SQL語(yǔ)句、獲得結(jié)果等功能。JDBC API使開(kāi)發(fā)人員獲得了標(biāo)準(zhǔn)的、純Java的數(shù)據(jù)庫(kù)程序設(shè)計(jì)接口,在Java程序中為訪問(wèn)任意類型的數(shù)據(jù)庫(kù)提供支持。JDBC Driver Manager(驅(qū)動(dòng)管理器)為應(yīng)用程序裝載數(shù)據(jù)庫(kù)驅(qū)動(dòng),確保使用正確的驅(qū)動(dòng)來(lái)訪問(wèn)每個(gè)數(shù)據(jù)源。JDBC Driver Manager的一個(gè)特色功能是,它能夠支持連接到多個(gè)異構(gòu)數(shù)據(jù)庫(kù)的多個(gè)并發(fā)驅(qū)動(dòng)程序。JDBC Driver API提供了數(shù)據(jù)庫(kù)廠商編寫驅(qū)動(dòng)程序時(shí)必須實(shí)現(xiàn)的接口。

JDBC擴(kuò)展了Java的能力,它讓開(kāi)發(fā)人員在開(kāi)發(fā)數(shù)據(jù)庫(kù)程序時(shí)真正實(shí)現(xiàn)"一次編寫,處處運(yùn)行",例如,企業(yè)可以通過(guò)JDBC程序讓使用不同操作系統(tǒng)的員工在互聯(lián)網(wǎng)上連接到多個(gè)全球數(shù)據(jù)庫(kù)上,而這些全球數(shù)據(jù)庫(kù)可以是不相同的。

JDBC的常用API

JDBC定義了一系列操作數(shù)據(jù)庫(kù)的接口和類,這些接口和類位于java.sql包中。本節(jié)將詳細(xì)介紹JDBC的常用API。

1. Driver接口

Driver接口是所有JDBC驅(qū)動(dòng)程序必須要實(shí)現(xiàn)的接口,該接口供數(shù)據(jù)庫(kù)廠商使用。在編寫JDBC程序時(shí),必須先裝載特定數(shù)據(jù)庫(kù)廠商的驅(qū)動(dòng)程序,裝載驅(qū)動(dòng)程序通過(guò)java.lang.Class類中的靜態(tài)方法forName()實(shí)現(xiàn)。

2. DriverManager類

DriverManager類用于加載JDBC驅(qū)動(dòng)并創(chuàng)建與數(shù)據(jù)庫(kù)的連接,DriverManager類的常用方法如表1.1所示。

表1.1 DriverManager的常用方法

方法名稱功能描述
registerDriver(Driver driver)注冊(cè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序
getConnection (String url,String user,String password)獲取數(shù)據(jù)庫(kù)連接
3. Connection接口

Connection接口表示Java程序和數(shù)據(jù)庫(kù)的連接,Java程序和數(shù)據(jù)庫(kù)的交互是通過(guò)Connection接口來(lái)完成的。Connection接口的常用方法如表1.2所示。

表1.2 Connection接口的常用方法

方法名稱功能描述
createStatement()創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送sql的Statement對(duì)象
prepareStatement(String sql)創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送預(yù)編譯sql的PrepareSatement對(duì)象
prepareCall(String sql)創(chuàng)建執(zhí)行存儲(chǔ)過(guò)程的CallableStatement對(duì)象
4. Statement接口

Statement接口用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,Statement接口提供了三種執(zhí)行SQL語(yǔ)句的方法,具體如表1.3所示。

表1.3 Statement接口的方法

方法名稱功能描述
execute(String sql)運(yùn)行語(yǔ)句,返回是否有結(jié)果集
executeQuery(String sql)運(yùn)行select語(yǔ)句,返回ResultSet結(jié)果集
executeUpdate(String sql)運(yùn)行insert/update/delete操作,返回更新的行數(shù)
5. PreparedStatement接口

PreparedStatement接口繼承自Statement接口,用于執(zhí)行預(yù)編譯的SQL語(yǔ)句,PreparedStatement接口提供了一些對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本操作的方法,具體如表1.4所示。

表1.4 PreparedStatement接口的方法

方法名稱功能描述
executeQuery(String sql)運(yùn)行select語(yǔ)句,返回ResultSet結(jié)果集
executeUpdate(String sql)運(yùn)行insert/update/delete操作,返回更新的行數(shù)
addBatch(String sql)把多條sql語(yǔ)句放到一個(gè)批處理中
executeBatch()向數(shù)據(jù)庫(kù)發(fā)送一批sql語(yǔ)句執(zhí)行
6. CallableStatement接口

CallableStatement接口繼承自PreparedStatement接口,由prepareCall()方法創(chuàng)建,用于調(diào)用SQL的存儲(chǔ)過(guò)程。CallableStatement接口提供了一些對(duì)數(shù)據(jù)庫(kù)進(jìn)行基本操作的方法,具體如表1.5所示。

表1.5 CallableStatement接口的方法

方法名稱功能描述
wasNull()查詢最后一個(gè)讀取的OUT參數(shù)是否為SQL類型的Null值
setNull(String parameterName,int sqlType)將指定參數(shù)設(shè)置為SQL類型的NULL
getInt(int parameterIndex )以Java語(yǔ)言中int值的形式獲取數(shù)據(jù)庫(kù)中Integer類型參數(shù)的值
setString(String parameterName,String x)將指定參數(shù)設(shè)置為給定的Java類型的String值
registerOutParameter(int parameterIndex, int sqlType)按順序位置parameterIndex將OUT參數(shù)注冊(cè)為SQL類型
7. ResultSet接口

ResultSet接口表示執(zhí)行select查詢語(yǔ)句獲得的結(jié)果集,該結(jié)果集采用邏輯表格的形式封裝。ResultSet接口中提供了一系列操作結(jié)果集的方法,具體如表1.6所示。

表1.6 ResultSet接口的方法

方法名稱功能描述
getString(int index)、getString(String columnName)獲得在數(shù)據(jù)庫(kù)里是varchar、char等類型的數(shù)據(jù)對(duì)象
getFloat(int index)、getFloat(String columnName)獲得在數(shù)據(jù)庫(kù)里是Float類型的數(shù)據(jù)對(duì)象
getDate(int index)、getDate(String columnName)獲得在數(shù)據(jù)庫(kù)里是Date類型的數(shù)據(jù)
getBoolean(int index) 、getBoolean(String columnName)獲得在數(shù)據(jù)庫(kù)里是Boolean類型的數(shù)據(jù)
getObject(int index)、getObject(String columnName)向數(shù)據(jù)庫(kù)發(fā)送一批sql語(yǔ)句執(zhí)行
next()移動(dòng)到下一行
previous()移動(dòng)到前一行
absolute(int row)移動(dòng)到指定行
beforeFirst()移動(dòng)resultSet的最前面
afterLast()移動(dòng)到resultSet的最后面
ResultSet對(duì)象維護(hù)了一個(gè)指向表格數(shù)據(jù)行的指針,指針默認(rèn)在第一行之前,調(diào)用next()或previous()等移動(dòng)指針的方法,可以使指針指向具體的數(shù)據(jù)行,然后通過(guò)調(diào)用getObject()方法獲取指定的查詢結(jié)果。

8. ResultSetMetaData接口

ResultSetMetaData接口用于獲取關(guān)于ResultSet 對(duì)象中列的類型和屬性信息的對(duì)象。ResultSetMetaData接口的常用方法,具體如表1.7所示。

表1.7 ResultSetMetaData接口的常用方法

方法名稱功能描述
getColumCount()返回所有字段的數(shù)目
getColumName(int colum)根據(jù)字段的索引值取得字段的名稱
getColumType (int colum)根據(jù)字段的索引值取得字段的類型
JDBC URL

JDBC URL提供了一種標(biāo)識(shí)數(shù)據(jù)庫(kù)的方法,它可以使JDBC程序識(shí)別指定的數(shù)據(jù)庫(kù)并與之建立連接。大家在編寫JDBC程序時(shí), 無(wú)須關(guān)注JDBC URL的形成過(guò)程,只需使用與所用的數(shù)據(jù)庫(kù)一起提供的URL即可。

JDBC URL的標(biāo)準(zhǔn)語(yǔ)法如圖1.4所示(以MySQL為例)。




圖1.4 JDBC URL的標(biāo)準(zhǔn)語(yǔ)法

從圖1.4中可以看到,JDBC URL由協(xié)議、子協(xié)議、主機(jī):端口、數(shù)據(jù)庫(kù)名稱、參數(shù)等組成。其中,JDBC URL中的協(xié)議總是JDBC,子協(xié)議因數(shù)據(jù)庫(kù)廠商的不同而有所差異,在本例中為MySQL,主機(jī)為數(shù)據(jù)庫(kù)所在的主機(jī)地址,端口為MySQL數(shù)據(jù)庫(kù)的默認(rèn)端口號(hào)3306,參數(shù)多為連接屬性的配置信息,包括數(shù)據(jù)庫(kù)的用戶名、密碼、編碼、套接字連接的超時(shí)等,JDBC URL的常用參數(shù)如表1.8所示。

表1.8 JDBC URL的常用參數(shù)

參數(shù)類型參數(shù)名稱
user數(shù)據(jù)庫(kù)用戶名,用于連接數(shù)據(jù)庫(kù)
password用戶密碼,用于連接數(shù)據(jù)庫(kù)
useUnicode是否使用Unicode字符集,如果參數(shù)characterEncoding設(shè)置為gb2312或gbk,本參數(shù)值必須設(shè)置為true
characterEncoding當(dāng)useUnicode設(shè)置為true時(shí),指定字符編碼。比如可設(shè)置為gb2312、gbk、utf8
autoReconnect當(dāng)數(shù)據(jù)庫(kù)連接異常中斷時(shí),是否自動(dòng)重新連接
autoReconnectForPools是否使用針對(duì)數(shù)據(jù)庫(kù)連接池的重連策略
failOverReadOnly自動(dòng)重連成功后,連接是否設(shè)置為只讀
maxReconnectsautoReconnect重試連接的次數(shù)
initialTimeoutautoReconnect兩次重連之間的時(shí)間間隔,單位:秒
connectTimeout和數(shù)據(jù)庫(kù)服務(wù)器建立socket連接時(shí)的超時(shí),單位:毫秒。 0表示永不超時(shí),適用于JDK 1.4及更高版本
socketTimeoutsocket操作(讀寫)超時(shí),單位:毫秒。 0表示永不超時(shí)


關(guān)鍵詞:基礎(chǔ),入門,實(shí)戰(zhàn)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉