第六章 數(shù)據(jù)庫連接_第1頁
第六章 數(shù)據(jù)庫連接_第2頁
第六章 數(shù)據(jù)庫連接_第3頁
第六章 數(shù)據(jù)庫連接_第4頁
第六章 數(shù)據(jù)庫連接_第5頁
已閱讀5頁,還剩35頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第六章數(shù)據(jù)庫連接第一頁,共四十頁,2022年,8月28日重點+難點數(shù)據(jù)庫環(huán)境的配置利用JDBC驅(qū)動實現(xiàn)對數(shù)據(jù)庫的訪問第二頁,共四十頁,2022年,8月28日6.1數(shù)據(jù)庫和常用的SQL語句數(shù)據(jù)庫管理系統(tǒng)(DBMS)是一個軟件系統(tǒng),它具有存儲、檢索和修改數(shù)據(jù)的功能,數(shù)據(jù)庫關(guān)聯(lián)系統(tǒng)具有4個發(fā)展階段。層次型、網(wǎng)絡(luò)型、關(guān)系型和關(guān)系對象型。我們使用的是SQLServer2000,mysqlJDBC是Sun公司提供的一組類和接口,程序員可以利用這組類和接口與數(shù)據(jù)庫進行通信。JDBC接口,非常方便的實現(xiàn)了在java中連接數(shù)據(jù)庫第三頁,共四十頁,2022年,8月28日SQL語句創(chuàng)建刪除數(shù)據(jù)庫createdatabasebookdropdatabasebook創(chuàng)建刪除表createtableitem(item_Idint,item_namevarchar(20))droptableitem更改表的結(jié)構(gòu)altertableitemadditem_disvarchar(100)altertableitemdropitem第四頁,共四十頁,2022年,8月28日SQL語句創(chuàng)建刪除視圖createviewproducts(productname,quantity,listprice)ductname,v.qty,i.listpricefromproductp,inventoryv,ductId=ductidanditwmid=v.itemiddeleteviewproducts插入一條語句insert語句是用來向表中添加記錄的insertintoitemvalues(1,“計算機”,“計算機工程類的書籍”)第五頁,共四十頁,2022年,8月28日SQL語句在表中刪除數(shù)據(jù)delete刪除表中已經(jīng)存在的一條或多條記錄deletefromitemwhereitem_Id=1;更新表中的數(shù)據(jù)update語句用來修改表中已經(jīng)存在的一條或多條記錄updateitemsetintem_name=“法學(xué)”whereitem_Id=1第六頁,共四十頁,2022年,8月28日SQL語句條件子句(1)where語句使用where可以選擇滿足條件的特定記錄(2)in和notin選擇列值與列值表中某一個值相等的相關(guān)信息(3)between…and和notbetween…and選擇列值在某個范圍的記錄(4)like和notlike(5)isnull和notnull(6)邏輯運算and和or(7)orderby語句第七頁,共四十頁,2022年,8月28日6.2JDBC技術(shù)和驅(qū)動程序

技術(shù)介紹JDBCAPI為Java開發(fā)人員使用數(shù)據(jù)庫提供了統(tǒng)一的編程接口,它由一組Java類和接口組成。JDBCAPI使得開發(fā)人員可與使用純Java語言的方式來連接數(shù)據(jù)庫,并進行操作。企業(yè)級環(huán)境中進行的數(shù)據(jù)庫操作遠遠不只是連接數(shù)據(jù)庫并執(zhí)行語句,還需要考慮其它方面的要求。包括使用連接緩沖池來優(yōu)化資源的使用,實現(xiàn)分布式事務(wù)處理。第八頁,共四十頁,2022年,8月28日JDBC3.0版本包含了兩個包:Java.sql和Javax.sqlJava.sql這個包中的類和接口主要是針對基本的數(shù)據(jù)庫編程服務(wù),如生成連接、執(zhí)行語句、以及準(zhǔn)備語句和運行批處理查詢等。同時也有一些高級操作,比如批處理更新、事物隔離和可滾動結(jié)果集等。Javax.sql這個包主要是為數(shù)據(jù)庫方面的高級操作提供接口和類。如連接管理類、創(chuàng)建語句類第九頁,共四十頁,2022年,8月28日數(shù)據(jù)庫驅(qū)動器程序數(shù)據(jù)庫廠商一般會提供一組API訪問數(shù)據(jù)庫,有些廠商也專門提供數(shù)據(jù)庫驅(qū)動程序,并且這些產(chǎn)品除了執(zhí)行驅(qū)動的功能外,往往還提供一些額外的服務(wù)。JDBC驅(qū)動程序是數(shù)據(jù)庫廠商根據(jù)Sun公司提供的JDBC接口標(biāo)準(zhǔn)提供的一組實現(xiàn)類。JDBC驅(qū)動程序的類型JDBC-ODBC橋驅(qū)動程序及ODBC驅(qū)動程序

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

JDBC-Net純Java驅(qū)動程序

本地協(xié)議純Java驅(qū)動程序

第十頁,共四十頁,2022年,8月28日有4種類型的數(shù)據(jù)庫驅(qū)動程序JDBC-ODBC橋通過JDBC-ODBC橋,開發(fā)者可以使用JDBC訪問一個ODBC數(shù)據(jù)源。JDBC-ODBC橋驅(qū)動程序為Java應(yīng)用程序提供了一種把JDBC調(diào)用映射成ODBC調(diào)用的方法。因此在客戶端計算機上安裝一個ODBC驅(qū)動。缺點:效率相對底下。部分Java,部分本機驅(qū)動程序這種驅(qū)動程序使用Java實現(xiàn)與數(shù)據(jù)庫廠商專有API混合形式來提供數(shù)據(jù)訪問。它比JDBC-ODBC橋的形式快。在這種方勢力,必須在運行Java應(yīng)用程序的客戶端安裝驅(qū)動程序和廠商專有的API?,F(xiàn)在大多數(shù)的數(shù)據(jù)庫廠商都在其數(shù)據(jù)庫產(chǎn)品中提供該驅(qū)動程序第十一頁,共四十頁,2022年,8月28日中間數(shù)據(jù)訪問服務(wù)器 這種形式使用中間數(shù)據(jù)訪問服務(wù)器。通過這種服務(wù)器,他可以把Java客戶端連接到多個數(shù)據(jù)庫服務(wù)器上。他不需要客戶端的數(shù)據(jù)庫驅(qū)動,而是使用網(wǎng)絡(luò)-服務(wù)器中層來訪問一個數(shù)據(jù)庫。該類型的驅(qū)動程序使用網(wǎng)絡(luò)協(xié)議,并完全通過Java驅(qū)動,他為Java應(yīng)用程序提供了一種進行JDBC調(diào)用的機制。純Java驅(qū)動程序 這種方式使用廠商專有的網(wǎng)絡(luò)協(xié)議把JDBCAPI調(diào)用轉(zhuǎn)換稱直接的網(wǎng)絡(luò)調(diào)用,這種方式的本質(zhì)是使用套接字進行編程。純Java驅(qū)動運行在客戶端,并且直接訪問數(shù)據(jù)庫。它的使用比較簡單,客戶端不需要安裝任何中間件或者運行庫?,F(xiàn)在大部分廠商都提供第4類驅(qū)動程序的支持。第十二頁,共四十頁,2022年,8月28日四種訪問方式比較第1、2類驅(qū)動程序是數(shù)據(jù)庫廠商為提供第4類JDBC驅(qū)動程序的一種過渡解決方案,例如通過JDBC訪問Access數(shù)據(jù)庫。第3類驅(qū)動程序適合那種需要同時連接多個不同種類的數(shù)據(jù)庫,并且對并發(fā)連接要求高的三層應(yīng)用程序中。第1、2、4類驅(qū)動程序常用于C/S模式的應(yīng)用程序中。訪問速度:2>4>1 穩(wěn)定性:4>2>1第十三頁,共四十頁,2022年,8月28日6.3JDBC常用接口使用介紹1.Driver接口每個數(shù)據(jù)庫驅(qū)動程序必須實現(xiàn)Driver接口。對于JSP開發(fā)者而言,只要使用Driver接口就可以了。在編程中要連接數(shù)據(jù)庫,必須先裝載特定廠商提供的數(shù)據(jù)庫驅(qū)動程序(Driver),不同驅(qū)動程序的裝載方法。使用JDBC-ODBCBridgeDriver,這樣裝載:Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

對于Access適用第十四頁,共四十頁,2022年,8月28日使用JDBCDriver,這樣裝載

Class.forName(“jdbc.driver_class_name”);在使用Class.forName之前,先適用import語句導(dǎo)入java.sql包。

importjava.sql.*;裝載MSSQLServer驅(qū)動:Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);裝載MySQLJDBC驅(qū)動:Class.forName(“org.git.mm.mysql.Driver”);裝載OracleJDBC驅(qū)動:Class.forName(“oracle.jdbc.driver.OracleDriver”);第十五頁,共四十頁,2022年,8月28日2.DriverManager(驅(qū)動程序管理器) DriverManager是JDBC(Java數(shù)據(jù)庫連接)的管理層。作用于用戶和驅(qū)動程序之間。DriverManager可以跟蹤驅(qū)動程序,并在數(shù)據(jù)庫和相應(yīng)驅(qū)動程序之間建立連接。

DriverManager激發(fā)getConnection()方法時,DriverManager首先從它已加載的驅(qū)動程序池中找到一個可以接受該數(shù)據(jù)庫URL的驅(qū)動程序,然后請求該驅(qū)動程序使用相關(guān)的數(shù)據(jù)庫URL連接到數(shù)據(jù)庫中,于是getConnection()方法建立了與數(shù)據(jù)庫連接。第十六頁,共四十頁,2022年,8月28日DriverManager.getConnection()方法(靜態(tài)的)staticconnectiongetConnection(Stringurl);staticconnectiongetConnection(Stringurl,Stringinfo);staticconnectiongetConnection(Stringurl,Stringname,Stringpwd);URL:類似于其他場合的URL,語法如下:jdbc:<subprotocol>:<subname>jdbc:表示協(xié)議,他是唯一的,JDBC只有這一種協(xié)議子協(xié)議:主要用于識別數(shù)據(jù)庫驅(qū)動程序,也就是說,不同的數(shù)據(jù)庫驅(qū)動程序的子協(xié)議不同子名:它屬于專門的驅(qū)動程序,不同的專有驅(qū)動程序可以采用不同的實現(xiàn)第十七頁,共四十頁,2022年,8月28日數(shù)據(jù)庫連接字符串?dāng)?shù)據(jù)庫驅(qū)動程序名稱URLMicrosoftAccesssun.jdbc.odbc.JdbcOdbcDriverjdbc:odbc:studentMicrosoftSqlServer2000com.microsoft.jdbc.sqlserver.SQLServerDriverjdbc:microsoft:sqlserver://localhost:1433;databasename=studentMicrosoftSqlServer2005com.microsoft.sqlserver.jdbc.SQLServerDriverjdbc:sqlserver://localhost:2667;databasename=studentOracle9ioracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@localhost:1521:studentjdbc:oracle:oci:@student第十八頁,共四十頁,2022年,8月28日3.Connection

一個Connection表示與一個特定數(shù)據(jù)庫的會話。Connection對象代表與數(shù)據(jù)庫的連接。連接過程包括所執(zhí)行的SQL語句和在連接上所返回的結(jié)果。

Connectionconn=DriverManager.getConnection(url,login,pwd);Connection接口是JSP編程中使用最頻繁的接口之一。Connection接口中常用到的方法:

close():關(guān)閉連接。

isclose():判斷連接是否關(guān)閉。

createStatement():創(chuàng)建SQL語句對象。第十九頁,共四十頁,2022年,8月28日getAutoCommit():獲得當(dāng)前自動提交狀態(tài)。commit():提交對數(shù)據(jù)庫的更改,使更改生效。setAutoCommit(booleanvalue):設(shè)置連接是否處于自動提交狀態(tài)。rollback():回滾上一次提交或回滾操作后的所有更改prepareStatement(Stringsql):可以被預(yù)編譯存放在prepareStatement對象中,該對象用于有效地多次執(zhí)行該語句。prepareCall(Stringsql):返回值是創(chuàng)建的CallableStatement對象,可以用來處理一個SQL存儲過程setReadOnly():可以把一個連接設(shè)置為只讀狀態(tài)。isReadOnly():檢測該連接是否存在只讀狀態(tài)第二十頁,共四十頁,2022年,8月28日4.StatementStatement對象代表SQL語句??捎糜趯QL語句發(fā)送至數(shù)據(jù)庫。Statement對象存在3種。

Statement對象,用來執(zhí)行基本的SQL語句。

PrepareStatement對象,從Statement繼承,用于提供可以查詢信息一起預(yù)編譯的語句。

CallableStatement,它繼承自PrepareStatement,用來執(zhí)行數(shù)據(jù)庫中的存儲過程。Statement常用的方法:

cancle():用于一個線程取消另一個線程正在執(zhí)行的一條語句。第二十一頁,共四十頁,2022年,8月28日close():用來關(guān)閉語句。同時立即釋放該語句的數(shù)據(jù)庫和JDBC資源。如果它有相應(yīng)產(chǎn)生的ResultSet,則ResultSet也會被關(guān)閉。execute(Stringsql):執(zhí)行一條可能返回多個結(jié)果的SQL語句。返回布爾值。若有ResultSet,則返回true,如果它是一個更新數(shù)據(jù)或沒有其它結(jié)果,則返回false。executeQurey(Stringsql):執(zhí)行一個返回單個ResultSet的SQL語句,返回值是由查詢產(chǎn)生的數(shù)據(jù)ResultSet。executeUpdate(Stringsql):執(zhí)行一條insert、update或delete語句或是沒有返回值的SQL語句。該方法返回語句影響的行數(shù),如果是沒有影響的行數(shù)則返回0。第二十二頁,共四十頁,2022年,8月28日getResultSet():得到當(dāng)前的ResultSet的結(jié)果。getUpdateCount():得到更新的數(shù)量,如果結(jié)果是一個ResultSet或沒有其他結(jié)果,則返回-1。5.PrepareStatementPrepareStatement類對象封裝一條預(yù)編譯的SQL語句,用于高效地多次執(zhí)行該語句。常用的方法:clearParameters():立即釋放當(dāng)前參數(shù)值使用的資源execute():執(zhí)行一條可能返回多個結(jié)果的SQL語句,返回一個布爾值。如果下一個結(jié)果是ResultSet,則返回true,否則返回false第二十三頁,共四十頁,2022年,8月28日

executeQuery():執(zhí)行準(zhǔn)備好的SQL查詢并返回ResultSetexecuteUpdate():執(zhí)行一條insert、update或delete語句或是沒有返回值的SQL語句。setBoolean(intparameterIndex,booleanx);setByte(intparameterIndex,bytex)setBytes(intparameterIndex,bytex)setDate(intparameterIndex,Datex)setDouble(intparameterIndex,doublex)setFloat(intparameterIndex,floatx)setInt(intparameterIndex,intx)setShort(intparameterIndex,shortx)第二十四頁,共四十頁,2022年,8月28日6.ResultSetResultSet類可用來接受執(zhí)行SQL查詢語句

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論