国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDBC一(web基礎(chǔ)學(xué)習(xí)筆記七)

2019-11-14 22:41:48
字體:
供稿:網(wǎng)友
JDBC一(web基礎(chǔ)學(xué)習(xí)筆記七)一、JDBC

java數(shù)據(jù)庫的連接技術(shù)(Java DataBase Connectivity),能實(shí)現(xiàn)Java程序以各種數(shù)據(jù)庫的訪問

由一組使用Java語言編寫的類和接口(JDBC API)組成,它java.sql以及javax.sql中

二、JDBC 原理以及驅(qū)動(dòng)程序的分類2.1、JDBC 原理

原來的 SUN 公司(現(xiàn)在是Oracle 公司)在開發(fā)JDBC API 時(shí),將這些接口和類放在了兩個(gè)包中,java.sql 包和javax.sql 包中。而主要的接口和類都是在java.sql 包中,javax 包叫做擴(kuò)展包,javax.sql 包中有一些關(guān)于數(shù)據(jù)源、連接池和其他的一些擴(kuò)展的接口和類。JDBC 中最常用的幾個(gè)接口和類是 DriverManager 類、Connection 接口、Statement 接口、ResultSet 接口,DriverManager 這個(gè)類是管理驅(qū)動(dòng)程序的,可以獲得數(shù)據(jù)庫連接對象。JDBC的驅(qū)動(dòng)程序是實(shí)現(xiàn)了JDBC API 接口的類,由數(shù)據(jù)庫廠商來提供,所以我們在使用JDBC 連接數(shù)據(jù)庫的時(shí)候,需要導(dǎo)入數(shù)據(jù)庫的驅(qū)動(dòng)包,連接不同的數(shù)據(jù)庫,需要導(dǎo)入不同的包。而我們在編寫Java 應(yīng)用程序時(shí),基本上不用太關(guān)心這些包中的類。我們只需要用JDBC 的接口進(jìn)行編程就可以了,也就是java.sql 包和javax.sql 包中的接口。這些接口的對象都是通過其他對象來獲得的,我們不需要通過new 來創(chuàng)建它們。而這些對象的具體實(shí)現(xiàn)都是在驅(qū)動(dòng)程序中實(shí)現(xiàn)的,是驅(qū)動(dòng)程序類的對象。

2.2、驅(qū)動(dòng)程序分類
  1. JDBC 驅(qū)動(dòng)有四種,常用的JDBC 驅(qū)動(dòng)有兩種。在個(gè)人開發(fā)與測試中,可以使用JDBC-ODBC橋連方式,
  2. 在生產(chǎn)型開發(fā)中,推薦使用純Java 驅(qū)動(dòng)方式。
2.3、通過JDBC-ODBC 橋

通過JDBC-ODBC 橋,開發(fā)者可以使用JDBC 來訪問一個(gè)ODBC 數(shù)據(jù)源。JDBC-ODBC 橋驅(qū)動(dòng)程序?yàn)镴ava 應(yīng)用程序提供了一種把JDBC 調(diào)用映射為ODBC 調(diào)用的方法。只要本地機(jī)裝有相關(guān)的ODBC 驅(qū)動(dòng),那么采用JDBC-ODBC 橋幾乎可以訪問所有的數(shù)據(jù)庫。但是,由于JDBC-ODBC 先調(diào)用ODBC 再由ODBC 去調(diào)用本地?cái)?shù)據(jù)庫接口來訪問數(shù)據(jù)庫。所以,執(zhí)行效率比較低,對于那些大數(shù)據(jù)量存取的應(yīng)用是不適合的。而且,這種方法要求客戶端必須安裝ODBC 驅(qū)動(dòng),所以對于基于internet 和intranet 的應(yīng)用也是不合適的。因?yàn)椋悴豢赡芤笏锌蛻舳寄苷业絆DBC 驅(qū)動(dòng)。

使用JDBC-ODBC 進(jìn)行橋連步驟如下:

1、配置數(shù)據(jù)源:控制面板→管理工具→ODBC 數(shù)據(jù)源→系統(tǒng)DSN2、編程,通過橋連方式與數(shù)據(jù)庫建立連接

2.4、純Java 驅(qū)動(dòng)

純Java 驅(qū)動(dòng)直接把JDBC 調(diào)用轉(zhuǎn)換為符合相關(guān)數(shù)據(jù)庫系統(tǒng)規(guī)范的請求。用這種驅(qū)動(dòng)編寫的應(yīng)用程序可以直接和數(shù)據(jù)庫服務(wù)器通訊。這種類型的驅(qū)動(dòng)完全由Java 實(shí)現(xiàn),因此實(shí)現(xiàn)了平臺(tái)獨(dú)立性。

由于純Java 驅(qū)動(dòng)不需要先把JDBC 的調(diào)用傳給ODBC 或本地?cái)?shù)據(jù)庫接口或者是中間層服務(wù)器,而是將JDBC 調(diào)用直接轉(zhuǎn)換為DBMS 所使用的網(wǎng)絡(luò)協(xié)議,所以它的執(zhí)行效率是非常高的。這種驅(qū)動(dòng)程序可以動(dòng)態(tài)的被下載。但是它有一個(gè)缺點(diǎn),就是對于不同的數(shù)據(jù)庫,需要下載不同的驅(qū)動(dòng)程序。

使用純Java 驅(qū)動(dòng)方式進(jìn)行直連的步驟:1、下載數(shù)據(jù)庫廠商提供的驅(qū)動(dòng)程序包2、將驅(qū)動(dòng)程序包引入工程中3、編程,通過純Java 驅(qū)動(dòng)方式與數(shù)據(jù)庫建立連接

三、JDBC 編程步驟

要使用 JDBC 連接和操作數(shù)據(jù)庫,有一套固定的步驟。依照這些步驟,可以保證你正確的連接到數(shù)據(jù)庫并且操作它。

  • 第一步是注冊驅(qū)動(dòng),Class.forName()方法將驅(qū)動(dòng)程序類加載到虛擬機(jī)的內(nèi)存中。
  • 第二步是獲得數(shù)據(jù)庫的連接,是使用DriverManager 類的getConnection()方法來獲得的,同時(shí)需要在參數(shù)中給出連接數(shù)據(jù)庫的URL 和用戶名、密碼。這一步將得到一個(gè)數(shù)據(jù) 庫連接對象,是Connection 類型的。
  • 第三步是用數(shù)據(jù)庫連接對象獲得一個(gè)Statement 對象,這個(gè)對象可以用來執(zhí)行SQL 語句。
  • 第四步就是用Statement 對象執(zhí)行SQL 語句了。其實(shí),說是用Statement 對象來執(zhí)行SQL還不夠準(zhǔn)確,因?yàn)镾QL 語句只能被數(shù)據(jù)庫來執(zhí)行,Statement 只是負(fù)責(zé)發(fā)送SQL 和接收結(jié)果。但是不管是誰在執(zhí)行,這一步都將執(zhí)行SQL 語句。
  • 第五步是處理執(zhí)行結(jié)果,如果是更新的操作,可能是判斷一下是否更新成功,如果是查詢的操作,可能就是輸出查詢結(jié)果等等。
  • 最后,一定要記得釋放數(shù)據(jù)庫的連接。因?yàn)閿?shù)據(jù)庫的連接是一個(gè)重量級(jí)的對象。如果是多用戶并發(fā)訪問的應(yīng)用程序,比如B/S 應(yīng)用程序,每個(gè)用戶都是只連接但不釋放,將不斷耗費(fèi)服務(wù)器的資源直至服務(wù)器down 機(jī)。
四、JDBC API 介紹

JDBC 的API 中主要定義了一些連接和操作數(shù)據(jù)庫的接口,而具體的類卻很少。這是因?yàn)椋陂_發(fā)Java 的API 的時(shí)候,不可能讓JDBC 連接某個(gè)具體的數(shù)據(jù)庫,而只能確定一組規(guī)范。而連接具體數(shù)據(jù)庫的實(shí)現(xiàn),應(yīng)該由數(shù)據(jù)庫的廠商來做。通過統(tǒng)一的JDBC 規(guī)范,使得我們在連接各種數(shù)據(jù)庫的時(shí)候,編碼的方式是一樣的,這樣更利于代碼的復(fù)用和移植.

從上面JDBC 編程步驟中可以看出,使用JDBC 操作數(shù)據(jù)庫需要依賴幾個(gè)主要的JDBC API,接下來介紹這幾個(gè)JDBC API 的使用

4.1、DriverManager 類是用來管理數(shù)據(jù)庫驅(qū)動(dòng)的

java.sql 包中大多數(shù)都是接口,這是為數(shù)不多的類之一。它是非常常用的一個(gè)類,最主要的功能就是獲得數(shù)據(jù)庫的連接,它定義了三個(gè)連接數(shù)據(jù)庫的方法,差別在參數(shù)的數(shù)量上。三個(gè)參數(shù)的getConnection()方法是最常用的。三個(gè)參數(shù)分別是數(shù)據(jù)庫的URL、用戶名和密碼。

返回類型方法簽名說明
static ConnectiongetConnection(String url)

試圖建立到給定數(shù)據(jù)庫URL 的連接

static Connection

getConnection(String url,PRoperties info)

試圖建立到給定數(shù)據(jù)庫URL 的連接

static Connection

getConnection(String url,String user, String passWord)

試圖建立到給定數(shù)據(jù)庫URL 的連接

4.2、java.sql.Connection 接口表示應(yīng)用程序與數(shù)據(jù)庫的連接對象

由數(shù)據(jù)庫廠商來實(shí)現(xiàn),獲得Connection 對象的方法是通過DriverManager 類的getConnection()方法。通過Connection 對象, 我們可以獲得操作數(shù)據(jù)庫的Statement 、PreparedStatement ,CallableStatement 等對象。這些對象是用來執(zhí)行SQL 和存儲(chǔ)過程

4.3、Statement 接口的對象是用來執(zhí)行SQL 語句的,而且是執(zhí)行靜態(tài)的SQL 語句

Statement 接口的對象是用來執(zhí)行SQL 語句的,而且是執(zhí)行靜態(tài)的SQL 語句。所謂的靜態(tài)SQL 語句,是指SQL 語句由一個(gè)固定的SQL 字符串確定,運(yùn)行期不能修改參數(shù)

返回類型方法簽名說明
int

executeUpdate(String sql)

執(zhí)行給定 SQL 語句,該語句可能為 INSERT、UPDATE 或DELETE語句,或者不返回任何內(nèi)容的 SQL 語句(如 SQL DDL 語句)

ResultSet

executeQuery(String sql)

執(zhí)行給定的 SQL 語句,該語句返回單個(gè) ResultSet 對象

void

close()

立即釋放此 Statement 對象的數(shù)據(jù)庫和 JDBC 資源,而不是等待該對象自動(dòng)關(guān)閉時(shí)發(fā)生此操作

4.4、ResultSet 接口用來表示查詢結(jié)果集

當(dāng)我們調(diào)用Statement 的executeQuery()方法時(shí),就會(huì)得到一個(gè)ResultSet 的對象。ResultSet 對象中包含根據(jù)查詢語句查詢出來的一個(gè)結(jié)果集,但是,實(shí)際上這些內(nèi)容還是在數(shù)據(jù)庫當(dāng)中,還并沒有真正的取出到虛擬機(jī)的內(nèi)存中。ResultSet 其實(shí)是保存了一個(gè)指向其當(dāng)前數(shù)據(jù)行的游標(biāo),我們需要使用ResultSet 的方法讓游標(biāo)一行一行的向下移動(dòng),然后獲取每一行的數(shù)據(jù),所以在操作ResultSet 對象期間,數(shù)據(jù)庫連接不能關(guān)閉。

返回類型方法簽名說明
booleannext()將CURSOR(游標(biāo))從當(dāng)前位置向前移一行
Type

getType(String columnLabel)

根據(jù)數(shù)據(jù)庫表的列名得到指定列的值
Type

getType(intcolumnIndex)

根據(jù)列的序號(hào)得到指定列的值,第一列的序號(hào)是1。
voidclose()

立即釋放此 ResultSet 對象的數(shù)據(jù)庫和 JDBC 資源,而不是等待該對象自動(dòng)關(guān)閉時(shí)發(fā)生此操作

五、java.sql5.1、java.sql描述

編程語言訪問并處理存儲(chǔ)在數(shù)據(jù)源(通常是一個(gè)關(guān)系數(shù)據(jù)庫)中的數(shù)據(jù)的 API。此 API 包括一個(gè)框架,憑借此框架可以動(dòng)態(tài)地安裝不同驅(qū)動(dòng)程序來訪問不同數(shù)據(jù)源。盡管 JDBCTM API 主要用于將 SQL 語句傳遞給數(shù)據(jù)庫,但它還可以用于以表格方式從任何數(shù)據(jù)源中讀寫數(shù)據(jù)。通過接口的 javax.sql.RowSet 組可以使用的 reader/writer 實(shí)用程序,可以被定制以使用和更新來自電子表格、純文本文件或其他任何表格式數(shù)據(jù)源的數(shù)據(jù)

5.2、java.sql內(nèi)容

java.sql 包中包含用于以下方面的 API:

  • 通過 DriverManager 實(shí)用程序建立與數(shù)據(jù)庫的連接
    • DriverManager 類:建立與驅(qū)動(dòng)程序的連接
    • SQLPermission 類:當(dāng)代碼在 Security Manager(比如 applet)中運(yùn)行時(shí)提供權(quán)限,試圖通過 DriverManager 設(shè)置一個(gè)記錄流
    • Driver 接口:提供用來注冊和連接基于 JDBC 技術(shù)(“JDBC 驅(qū)動(dòng)程序”)的驅(qū)動(dòng)程序的 API,通常僅由 DriverManager 類使用
    • DriverPropertyInfo 類:提供 JDBC 驅(qū)動(dòng)程序的屬性,不是供一般用戶使用的
  • 向數(shù)據(jù)庫發(fā)送 SQL 語句
    • Statement:用于發(fā)送基本 SQL 語句
    • PreparedStatement:用于發(fā)送準(zhǔn)備好的語句或基本 SQL 語句(派生自 Statement
    • CallableStatement:用于調(diào)用數(shù)據(jù)庫存儲(chǔ)過程(派生自 PreparedStatement
    • Connection 接口:提供創(chuàng)建語句以及管理連接及其屬性的方法
    • Savepoint:在事務(wù)中提供保存點(diǎn)
  • 獲取和更新查詢的結(jié)果
    • ResultSet 接口
  • SQL 類型到 Java 編程語言中的類和接口的標(biāo)準(zhǔn)映射關(guān)系
    • Array 接口:SQL ARRAY 的映射關(guān)系
    • Blob 接口:SQL BLOB 的映射關(guān)系
    • Clob 接口:SQL CLOB 的映射關(guān)系
    • Date 類:SQL DATE 的映射關(guān)系
    • NClob 接口:SQL NCLOB 的映射關(guān)系
    • Ref 接口:SQL REF 的映射關(guān)系
    • RowId 接口:SQL ROWID 的映射關(guān)系
    • Struct 接口:SQL STRUCT 的映射關(guān)系
    • SQLxml 接口:SQL XML 的映射關(guān)系
    • Time 類:SQL TIME 的映射關(guān)系
    • Timestamp 類:SQL TIMESTAMP 的映射關(guān)系
    • Types 類:提供用于 SQL 類型的常量
  • 自定義映射 SQL 用戶定義類型 (UDT) 到 Java 編程語言中的類
    • SQLData 接口:指定 UDT 到此類的一個(gè)實(shí)例的映射關(guān)系
    • SQLInput 接口:提供用來從流中讀取 UDT 屬性的方法
    • SQLOutput 接口:提供用來將 UDT 屬性寫回流中的方法
  • 元數(shù)據(jù)
    • DatabaseMetaData 接口:提供有關(guān)數(shù)據(jù)庫的信息
    • ResultSetMetaData 接口:提供有關(guān) ResultSet 對象的列的信息
    • ParameterMetaData 接口:提供有關(guān) PreparedStatement 命令的參數(shù)的信息
  • 異常
    • SQLException:由大多數(shù)方法在訪問數(shù)據(jù)出問題時(shí)拋出,以及因?yàn)槠渌蛴善渌恍┓椒⊕伋?/li>
    • SQLWarning:為了指示一個(gè)警告而拋出
    • DataTruncation:為了指示數(shù)據(jù)可能已經(jīng)被截?cái)喽鴴伋?/li>
    • BatchUpdateException:為了指示并不是批量更新中的所有命令都成功執(zhí)行而拋出
六、JDBC 4.0

JDBC 4.0 API 中引入的 java.sqljavax.sql 特性

  • 自動(dòng) java.sql.Driver 發(fā)現(xiàn):不再需要通過 Class.forName 來加載 java.sql.Driver
  • 添加了國家字符集 (National Character Set) 支持
  • 為 SQL:2003 XML 數(shù)據(jù)類型添加的支持
  • SQLException 增強(qiáng):為原因鏈添加的支持;為公用 SQLState 類值代碼添加新 SQLException
  • 增強(qiáng)的 Blob/Clob 功能:提供創(chuàng)建和釋放 Blob/Clob 實(shí)例以及為了提高可訪問性所添加的一些其他方法
  • 為訪問 SQL ROWID 添加的支持
  • 添加的支持,允許 JDBC 應(yīng)用程序訪問已被供應(yīng)商包裝的 JDBC 資源實(shí)例,通常在一個(gè)應(yīng)用程序服務(wù)器或連接池環(huán)境中。
  • 當(dāng)與 PooledConnection 關(guān)聯(lián)的 PreparedStatement 已關(guān)閉或驅(qū)動(dòng)程序確定為無效時(shí)要通知的可用性

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿巴嘎旗| 大石桥市| 鹤庆县| 阜城县| 德钦县| 武陟县| 革吉县| 民乐县| 苏尼特右旗| 兴安县| 鹤峰县| 高邮市| 隆安县| 连江县| 衡水市| 嘉黎县| 清河县| 昌邑市| 班戈县| 尉犁县| 循化| 台南市| 商城县| 平利县| 普定县| 罗定市| 新乡市| 义乌市| 佛学| 永宁县| 蒙山县| 斗六市| 伊川县| 呼伦贝尔市| 曲阜市| 宁陕县| 江华| 阳江市| 赫章县| 剑阁县| 如皋市|