第7章上 Java數(shù)據(jù)庫連接(JDBC)_第1頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第2頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第3頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第4頁
第7章上 Java數(shù)據(jù)庫連接(JDBC)_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

基礎(chǔ)知識簡介數(shù)據(jù)庫管理系統(tǒng)(DatabaseManagementSystem)是一種操縱和管理數(shù)據(jù)庫的大型軟件,是用于建立、使用和維護(hù)數(shù)據(jù)庫,簡稱DBMS。用途:科學(xué)地組織和存儲數(shù)據(jù);高效地獲取和維護(hù)數(shù)據(jù)。常見的數(shù)據(jù)庫管理系統(tǒng):

MicrosoftAccessOracleMicrosoftSQLServerVisualFoxPro;沒有DBMS之前有了DBMS之后基礎(chǔ)知識簡介SQL語言:“結(jié)構(gòu)化查詢語言”StructuredQueryLanguageSQL語言的由來:最早的是IBM的圣約瑟研究實(shí)驗(yàn)室為其關(guān)系數(shù)據(jù)庫管理系統(tǒng)SYSTEMR開發(fā)的一種查詢語言,它的前身是SQUARE語言。SQL語言的優(yōu)點(diǎn):結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué)。SQL語言的地位:在關(guān)系型數(shù)據(jù)庫中的地位猶如英語在世界上的地位,它是數(shù)據(jù)庫系統(tǒng)的通用語言。利用SQL語言,用戶可以用幾乎同樣的語句在不同的數(shù)據(jù)庫管理系統(tǒng)上執(zhí)行同樣的操作。SQL已經(jīng)被ANSI(美國國家標(biāo)準(zhǔn)化組織)確定為數(shù)據(jù)庫系統(tǒng)的工業(yè)標(biāo)準(zhǔn)。

基礎(chǔ)知識簡介什么是ODBC?開放數(shù)據(jù)庫互連(OpenDatabaseConnectivity)微軟開放服務(wù)結(jié)構(gòu)中有關(guān)數(shù)據(jù)庫的一個組成部分ODBC有什么作用?建立了一組規(guī)范提供了一組對數(shù)據(jù)庫訪問的標(biāo)準(zhǔn)APIAPI:應(yīng)用程序編程接口ODBC本身提供了對SQL語言的支持:用戶可以直接將SQL語句送給ODBC?;A(chǔ)知識簡介ODBC的最大優(yōu)點(diǎn):能以統(tǒng)一的方式處理所有的數(shù)據(jù)庫。不依賴任何DBMS,不直接與DBMS打交道,所有的數(shù)據(jù)庫操作由對應(yīng)DBMS的ODBC驅(qū)動程序完成;不論是FoxPro、Access、MYSQL還是Oracle數(shù)據(jù)庫,均可用ODBCAPI進(jìn)行訪問。基礎(chǔ)知識簡介ODBC管理器的使用:首先必須用ODBC管理器注冊一個數(shù)據(jù)源。數(shù)據(jù)源中包含數(shù)據(jù)庫位置、數(shù)據(jù)庫類型及ODBC驅(qū)動程序等信息。然后ODBC管理器根據(jù)上述信息,自動建立起ODBC與具體數(shù)據(jù)庫的聯(lián)系。只要應(yīng)用程序?qū)?shù)據(jù)源名提供給ODBC,ODBC就能建立起與相應(yīng)數(shù)據(jù)庫的連接。JDBC簡介什么是JDBC?Java數(shù)據(jù)庫連接(JavaDataBaseConnectivity)Sun公司開發(fā)的一種用于執(zhí)行SQL語句的JavaAPI由一組用Java語言編寫的類和接口組成,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問通用性:只需用JDBCAPI編寫一個程序,就可以向相應(yīng)數(shù)據(jù)庫發(fā)送SQL語句,進(jìn)而訪問多種不同的數(shù)據(jù)庫ODBC與JDBC共同點(diǎn):ODBC:微軟公司開發(fā)的用于操作數(shù)據(jù)庫的方法JDBC:Sun公司開發(fā)的用于操作數(shù)據(jù)庫的方法不同點(diǎn):ODBC支持的數(shù)據(jù)庫類型多JDBC基于Java跨平臺特性,可移植性好JDBC簡介JDBC能哪完成3件事?與一個數(shù)據(jù)庫建立連接。向數(shù)據(jù)庫發(fā)送SQL語句。處理數(shù)據(jù)庫返回的結(jié)果。與數(shù)據(jù)庫建立連接的兩種方式:建立JDBC-ODBC橋接器:加載純Java數(shù)據(jù)庫驅(qū)動程序JDBC簡介1)建立JDBC-ODBC橋接器:由Sun公司本身開發(fā)出來的軟件模塊隨著JDK的更新,它的各種操作的API都是最新的性能不高(通常在教學(xué)中使用)2)加載純Java數(shù)據(jù)庫驅(qū)動程序所有驅(qū)動程序由各個數(shù)據(jù)庫生產(chǎn)廠商按照J(rèn)DBC標(biāo)準(zhǔn)提供經(jīng)常不支持最新版本的JDK性能較高(通常在軟件開發(fā)中使用)JDBC簡介使用JDBC-ODBC橋接器連接數(shù)據(jù)庫的過程:1)創(chuàng)建一個數(shù)據(jù)庫(Access)2)創(chuàng)建一個ODBC數(shù)據(jù)源,同數(shù)據(jù)庫建立連接3)載入驅(qū)動程序,建立一個JDBC-ODBC橋接器4)創(chuàng)建鏈接(Connection)對象,連接到數(shù)據(jù)庫5)創(chuàng)建語句(Statement)對象6)執(zhí)行SQL語句,得到查詢結(jié)果(ResultSet)7)對結(jié)果操作后,關(guān)閉連接JDBC-ODBC橋接器連接數(shù)據(jù)庫

1.建立數(shù)據(jù)庫使用Access創(chuàng)建一個數(shù)據(jù)庫student.mdb

該庫中有一個表,表的名字是“成績表”;該表中number、name、birthday字段的屬性是文本;math、english字段的屬性是數(shù)字。關(guān)鍵字是number,見教材圖15.1JDBC-ODBC橋接器連接數(shù)據(jù)庫

2.創(chuàng)建一個ODBC數(shù)據(jù)源1)打開"數(shù)據(jù)源(ODBC)"管理器:打開控制面板,選擇“性能和維護(hù)”→“管理工具”→“數(shù)據(jù)源(ODBC)”;或雙擊c:\windows\system32下的可執(zhí)行文件“odbcad32”。此時會出現(xiàn)ODBC數(shù)據(jù)源管理器的對話框。JDBC-ODBC橋接器連接數(shù)據(jù)庫

2.創(chuàng)建一個ODBC數(shù)據(jù)源2)添加數(shù)據(jù)源的驅(qū)動程序:在ODBC數(shù)據(jù)源管理器對話框中選擇“用戶DSN”然后單擊“添加”按鈕,將出現(xiàn)安裝數(shù)據(jù)源的驅(qū)動程序?qū)υ捒蛟谶x擇列表中選擇相應(yīng)的驅(qū)動程序,在選好之后,單擊“完成”按鈕。JDBC-ODBC橋接器連接數(shù)據(jù)庫

2.創(chuàng)建一個ODBC數(shù)據(jù)源3)創(chuàng)建數(shù)據(jù)源:完成上步操作后,系統(tǒng)將出現(xiàn)創(chuàng)建數(shù)據(jù)源對話框起名:為新建的數(shù)據(jù)源起一個名字;選擇:為新建的數(shù)據(jù)源選擇一個數(shù)據(jù)庫;高級設(shè)置:設(shè)置登錄名稱和密碼。JDBC-ODBC橋接器連接數(shù)據(jù)庫

3.建立一個JDBC-ODBC橋接器Class.forName("sun.jdbc.odbc.JdbcOdbcDriver")Class是包java.lang中的一個類;Class類通過調(diào)用靜態(tài)方法forName加載sun.jdbc.odbc包中的JdbcOdbcDriver類來建立橋接器;建立橋接器時,可能會發(fā)生異常,需要捕捉(參見教材P393代碼)JDBC常用類與接口使用包java.sql常用類與接口:

DriverManagerConnectionStatement

PreparedStatement

ResultSetJDBC-ODBC橋接器連接數(shù)據(jù)庫

4.創(chuàng)建一個連接對象

Connectioncon=DriverManager.getConnection("URL","login

name","password");首先,使用java.sql包中的Connection類聲明一個對象;然后,再使用類DriverManager調(diào)用其靜態(tài)方法getConnection創(chuàng)建這樣一個對象;URL:jdbc:odbc:數(shù)據(jù)源名字建立連接時,應(yīng)捕捉SQLException異常;參見教材P393代碼;Statementsql=con.createStatement();首先使用Statement聲明一個SQL語句對象;通過剛剛創(chuàng)建的連接數(shù)據(jù)庫的對象con調(diào)用方法createStatement()創(chuàng)建一個SQL語句對象;PreparedStatement

sql;

sql=con.prepareStatement("SQL語句");預(yù)編譯處理后,生成該數(shù)據(jù)庫底層的內(nèi)部命令,并將該命令封裝在PreparedStatement對象中JDBC-ODBC橋接器連接數(shù)據(jù)庫

5.創(chuàng)建SQL語句對象

sql.executeUpdate(“SQL語句”);

UPDATEINSERTDELETEsql.executeQuery(“SQL語句”);由SELECT語句使用,將數(shù)據(jù)庫查詢結(jié)果存放在一個ResultSet類的對象里。JDBC-ODBC橋接器連接數(shù)據(jù)庫

6.執(zhí)行SQL語句,進(jìn)行查詢ResultSet對象:實(shí)際上是一個管式數(shù)據(jù)集,即統(tǒng)一形式的列組織的數(shù)據(jù)行組成;ResultSet對象一次只能看到一個數(shù)據(jù)行,使用next()方法走到下一個數(shù)據(jù)行;ResultSet對象調(diào)用方法getXxx(),傳遞參數(shù)“位置索引”或列名稱,即可得到對應(yīng)的字段值。注意:使用該方法時不可顛倒順序!參見教材394頁表15.1JDBC-ODBC橋接器連接數(shù)據(jù)庫

6.執(zhí)行SQL語句,進(jìn)行查詢JDBC-ODBC橋接器連接數(shù)據(jù)庫

7.關(guān)閉數(shù)據(jù)庫數(shù)據(jù)庫每次使用后都必須關(guān)閉:關(guān)閉數(shù)據(jù)庫的順序與打開數(shù)據(jù)庫的順序相反1)先關(guān)閉結(jié)果集(ResultSet)2)再關(guān)閉操作(Statement)3)最后關(guān)閉連接(Connection)15.3順序查詢

使用結(jié)果集Result的next()方法,可以順序的查詢。一個結(jié)果集將游標(biāo)最初定位在第一行的前面,第一次調(diào)用next()方法使游標(biāo)移動到第一行。next()方法返回一個boolean型數(shù)據(jù),當(dāng)游標(biāo)移動到最后一行之后返回false。

15.4可滾動結(jié)果集

為了得到一個可滾動的結(jié)果集,必須使用下述方法先獲得一個Statement對象:Statementstmt=con.createStatement(inttype,intconcurrency);然后,根據(jù)參數(shù)的type、concurrency的取值情況,stmt返回相應(yīng)類型的結(jié)果集:ResultSetre=stmt.executeQuery(SQL語句);type的取值決定滾動方式:ResultSet.TYPE_FORWORD_ONLY

結(jié)果集的游標(biāo)只能向下滾動。ResultSet.TYPE_SCROLL_INSENSITIVE

結(jié)果集的游標(biāo)可以上下移動,當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集不變。ResultSet.TYPE_SCROLL_SENSITIVE

返回可滾動的結(jié)果集,當(dāng)數(shù)據(jù)庫變化時,當(dāng)前結(jié)果集同步改變。Concurrency取值決定是否可以用結(jié)果集更新數(shù)據(jù)庫:ResultSet.CONCUR_READ_ONLY

不能用結(jié)果集更新數(shù)據(jù)庫中的表。ResultSet.CONCUR_UPDATETABLE

能用結(jié)果集更新數(shù)據(jù)庫中的表。滾動查詢常用到的ResultSet的方法:參見教材P398previous()first()last()

beforeFirst()

afterlast()

getRow()

absolute(introw)15.5排序查詢

可以在SQL語句中使用ORDERBY子語句,對記錄排序。例如:按總成績排序查詢的SQL語句SELECT*FROMstudentORDERBYmath+english升序:ASC(默認(rèn))降序:DESC參見教材P399例題15.415.6模糊查詢

可以用SQL語句操作符LIKE進(jìn)行模式般配:使用“%”代替0個或多個字符;用一個下劃線“_”代替1個字符;比如,下述語句查詢姓氏是“王”的記錄:rs=sql.executeQuery("SELECT*FROMstudentsWHEREnameLIKE‘王%’");參見教材P400例題15.5課堂實(shí)驗(yàn):編寫登陸窗口類LoginFrame(如下圖所示),用于輸入用戶名和密碼。編寫數(shù)據(jù)庫查詢類DataOperation,該類包含靜態(tài)方法isLogin,用于查詢數(shù)據(jù)庫判斷登陸用戶是否存在。15.7隨機(jī)查詢

用Math類的靜態(tài)方法random()可以產(chǎn)生一個大于0小于1的隨機(jī)數(shù)。使用下述公式:

inti=(int)(Math.random()*number);

可以產(chǎn)生一個0到number之間的隨機(jī)數(shù)。根據(jù)這個隨機(jī)數(shù),將游標(biāo)移動到相應(yīng)的行,并輸出該行記錄。參見教材P401例題15.615.8更新、添加、刪除記錄

使用SQL語句更新記錄中字段的值Statement對象調(diào)用方法:

publicint

executeUpdate(String

sqlStatement);

通過參數(shù)sqlStatement指定的方式實(shí)現(xiàn)對數(shù)據(jù)庫表中記錄的字段值的更新。SQL更新操作常用命令:

UPDATEINSERTDELETESQL更新操作常用命令:UPDATE:UPDATEScoreTable

SETmath=88WHEREname='錢二'INSERT:INSERTINTOScoreTable

VALUES('2005008','1989-12-02','劉明明',70,95)DELETE:DELETEFROMScoreTable

WHEREnumber='2003004'課堂練習(xí):編寫程序,完成如下數(shù)據(jù)庫操作:將"錢大能"的英文成績改為66分;插入記錄('2005006','李向陽','1934-12-02',96,91)刪除學(xué)號為'2003002'的學(xué)生的信息記錄課堂練習(xí):編寫一個"學(xué)生成績查詢系統(tǒng)":15.9預(yù)處理語句

當(dāng)向數(shù)據(jù)庫發(fā)送一個SQL語句后,比如:“Select*Fromchengjibiao”首先,數(shù)據(jù)庫庫中的SQL解釋器負(fù)責(zé)將把SQL語句生成底層的內(nèi)部命令然后,執(zhí)行該命令,完成有關(guān)的數(shù)據(jù)操作。潛在的問題:如果應(yīng)用程序不斷地向數(shù)據(jù)庫提交SQL語句,勢必會增加數(shù)據(jù)庫中SQL解釋器的負(fù)擔(dān),影響執(zhí)行的速度。15.9預(yù)處理語句

預(yù)處理:首先,應(yīng)用程序針對連接的數(shù)據(jù)庫,事先將SQL語句解釋為數(shù)據(jù)庫底層的內(nèi)部命令;然后,直接讓數(shù)據(jù)庫去執(zhí)行這個命令。優(yōu)點(diǎn):不僅減輕了數(shù)據(jù)庫的負(fù)擔(dān);而且也提高了訪問數(shù)據(jù)庫的速度。對于JDBC,如果使用Connection和某個數(shù)據(jù)庫建立了連接對象con,那么con就可以調(diào)用prepareStatement(String

sql)

方法對SQL語句進(jìn)行預(yù)編譯處理;預(yù)編譯處理后,會生成該數(shù)據(jù)庫底層的內(nèi)部命令,并將該命令封裝在PreparedStatement對象中;那么該對象調(diào)用下列方法,都可以使得該底層的內(nèi)部命令被數(shù)據(jù)庫執(zhí)行:execute();executeQuery();executeUpdate()15.9預(yù)處理語句

PreparedStatement對象可調(diào)用的方法:execute():可執(zhí)行SQL任何命令executeQuery():執(zhí)行查詢命令executeUpdate():執(zhí)行更新、插入或刪除命令只要編譯好了PrepareedStatement對象,那么該對象可以隨時的執(zhí)行上述方法,顯然提高了訪問數(shù)據(jù)庫的速度15.9預(yù)處理語句

參見教材P401例題15.6con=DriverManager.getConne

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論