




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、模塊模塊6java數(shù)據(jù)庫(kù)編程數(shù)據(jù)庫(kù)編程主講教師:成奮華6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作項(xiàng)目項(xiàng)目42 使用使用jdbc-odbc橋接實(shí)現(xiàn)與數(shù)據(jù)橋接實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接及查詢數(shù)據(jù)表中的數(shù)據(jù)庫(kù)的連接及查詢數(shù)據(jù)表中的數(shù)據(jù) w jdbc的基本功能的基本功能 njava database connectivity,java數(shù)據(jù)庫(kù)連接n由一組用java編程語(yǔ)言編寫的類和接口組成,是一種可用于執(zhí)行sql語(yǔ)句的java api n在java.sql包中定義 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w jdbc api 中定義的主要類n數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序管理器
2、類drivermanager l在用戶程序和數(shù)據(jù)庫(kù)系統(tǒng)之間維護(hù)著與數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序之間的連接 l實(shí)現(xiàn)驅(qū)動(dòng)程序的裝載 l創(chuàng)建與數(shù)據(jù)庫(kù)系統(tǒng)連接的connection類對(duì)象 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作drivermanager類的常用方法方法主要功能主要功能void deregisterdriver(driverdriver)從 drivermanager 的列表中刪除一個(gè)驅(qū)動(dòng)程序connection getconnection(stringurl)建立到給定數(shù)據(jù)庫(kù) url 的連接connection getconnection(stringurl, prope
3、rtiesinfo)建立到給定數(shù)據(jù)庫(kù) url 的連接connection getconnection(stringurl, stringuser, stringpassword)建立到給定數(shù)據(jù)庫(kù) url 的連接driver:每個(gè)驅(qū)動(dòng)程序類必須實(shí)現(xiàn)的接口 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作driver getdriver (stringurl)查找能理解給定 url 的驅(qū)動(dòng)程序enumeration getdrivers()獲取帶有當(dāng)前調(diào)用者可以訪問(wèn)的所有當(dāng)前已加載 jdbc 驅(qū)動(dòng)程序的 enumerationint getlogintimeout()獲取驅(qū)動(dòng)程序
4、試圖登錄到某一數(shù)據(jù)庫(kù)時(shí)可以等待的最長(zhǎng)時(shí)間,以秒為單位。void registerdriver (driverdriver)向 drivermanager 注冊(cè)給定驅(qū)動(dòng)程序void setlogintimeout (intseconds)設(shè)置驅(qū)動(dòng)程序試圖連接到某一數(shù)據(jù)庫(kù)時(shí)將等待的最長(zhǎng)時(shí)間,以秒為單位。6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作類類connection用于管理到指定數(shù)據(jù)庫(kù)的連接用于管理到指定數(shù)據(jù)庫(kù)的連接 方法方法主要功能主要功能void clearwarning()清除為此 connection 對(duì)象報(bào)告的所有警告sqlwarning getwarnings
5、()獲取此 connection 對(duì)象上的調(diào)用報(bào)告的第一個(gè)警告void close()即釋放此 connection 對(duì)象的數(shù)據(jù)庫(kù)和 jdbc 資源boolean isclosed() 查詢此 connection 對(duì)象是否已經(jīng)被關(guān)閉void commit()使所有上一次提交/回滾后進(jìn)行的更改成為持久更改,并釋放此 connection 對(duì)象當(dāng)前持有的所有數(shù)據(jù)庫(kù)鎖。6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作statement createstatement (intresultsettype, intresultsetconcurrency)創(chuàng)建一個(gè) statement
6、 對(duì)象,該對(duì)象將生成具有給定類型和并發(fā)性的 resultset 對(duì)象statement用于執(zhí)行靜態(tài) sql 語(yǔ)句并返回它所生成結(jié)果的對(duì)象 resultsettype包括:type_forward_only 1003 指針只能向前移動(dòng)type_scroll_insensitive 1004指針可滾動(dòng)但通常不受其他的更改影響type_scroll_sensitive 1005指針可滾動(dòng)并且通常受其他的更改影響resultsetconcurrency包括concur_read_only 1007 不可以更新concur_updatable 1008 可以更新 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)
7、據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作statement createstatement()創(chuàng)建一個(gè) statement 對(duì)象來(lái)將 sql 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)string getcatalog()獲取此 connection 對(duì)象的當(dāng)前目錄名稱void setcatalog (stringcatalog)設(shè)置給定目錄名稱databasemetadata getmetadata()獲取一個(gè) databasemetadata 對(duì)象,該對(duì)象包含關(guān)于此 connection 對(duì)象所連接的數(shù)據(jù)庫(kù)的元數(shù)據(jù)接口 databasemetadata(數(shù)據(jù)庫(kù)元數(shù)據(jù))關(guān)于數(shù)據(jù)庫(kù)的整體綜合信息 元數(shù)據(jù):描述數(shù)據(jù)及其環(huán)境的數(shù)據(jù)能提供
8、基于用戶的信息能支持系統(tǒng)對(duì)數(shù)據(jù)的管理和維護(hù) 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作boolean isreadonly()查詢此 connection 對(duì)象是否處于只讀模式void setreadonly (booleanreadonly)將此連接設(shè)置為只讀模式callablestatement preparecall(stringsql)創(chuàng)建一個(gè) callablestatement 對(duì)象來(lái)調(diào)用數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程callablestatement:用于執(zhí)行 sql 存儲(chǔ)過(guò)程的接口preparedstatement:表示預(yù)編譯的 sql 語(yǔ)句的對(duì)象 preparedsta
9、tement preparestatement(stringsql)創(chuàng)建一個(gè) preparedstatement 對(duì)象來(lái)將參數(shù)化的 sql 語(yǔ)句發(fā)送到數(shù)據(jù)庫(kù)void rollback()取消在當(dāng)前事務(wù)中進(jìn)行的所有更改,并釋放此 connection 對(duì)象當(dāng)前持有的所有數(shù)據(jù)庫(kù)鎖6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作wjdbc訪問(wèn)數(shù)據(jù)庫(kù)的兩種方式訪問(wèn)數(shù)據(jù)庫(kù)的兩種方式n利用數(shù)據(jù)庫(kù)產(chǎn)品的面向利用數(shù)據(jù)庫(kù)產(chǎn)品的面向odbc驅(qū)動(dòng)程序,在驅(qū)動(dòng)程序,在jdbc和和odbc之間建立之間建立jdbc- odbc橋,橋,在在java程序中基于程序中基于jdbc- odbc橋的方式橋的方式訪
10、問(wèn)數(shù)據(jù)庫(kù)訪問(wèn)數(shù)據(jù)庫(kù)n基于特定數(shù)據(jù)庫(kù)產(chǎn)品的基于特定數(shù)據(jù)庫(kù)產(chǎn)品的jdbc驅(qū)動(dòng)程序,在驅(qū)動(dòng)程序,在java應(yīng)用程序中利用應(yīng)用程序中利用jdbc數(shù)據(jù)驅(qū)動(dòng)程序直數(shù)據(jù)驅(qū)動(dòng)程序直接與數(shù)據(jù)庫(kù)連接接與數(shù)據(jù)庫(kù)連接 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w建立數(shù)據(jù)庫(kù)連接建立數(shù)據(jù)庫(kù)連接 n首先必須通過(guò)java.lang.class類的forname()動(dòng)態(tài)加載驅(qū)動(dòng)程序類,加載驅(qū)動(dòng)器的語(yǔ)句為: class.forname(sun.jdbc.odbc.jdbcodbcdrvier);n再向drivermanager注冊(cè)jdbc驅(qū)動(dòng)程序,用drivermanager類中的getconnectio
11、n()方法建立與數(shù)據(jù)庫(kù)的連接。 connection con=drivermanager.getconnection(url, 數(shù)據(jù)庫(kù)的用戶名,密碼);l url是由三部分組成,是提供識(shí)別數(shù)據(jù)庫(kù)方式的串:: 例:如果數(shù)據(jù)源是mydatasource,則url可以寫成: jdbc:odbc:mydatasource6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (windows xp )n打開控制面版性能和維護(hù)管理工具數(shù)據(jù)源(odbc)n在“用戶dsn”中單擊添加按鈕 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w 創(chuàng)
12、建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (windows xp )n選擇sql server,點(diǎn)擊完成按鈕 n在名稱欄內(nèi)寫上數(shù)據(jù)源的名字,如mydatasource 服務(wù)如果是用本機(jī)的話就直接寫上“.”號(hào)就可以了,如果是用別的服務(wù)器,請(qǐng)單擊下拉按鈕選擇。然后單擊下一步 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (windows xp )n可以選擇使用用戶輸入登錄的id和密碼的sql server驗(yàn)證,然后設(shè)置登錄sql的用戶名和密碼,如用戶名為sa,密碼為空,然后點(diǎn)下一步 n更改默認(rèn)的數(shù)據(jù)庫(kù)(你處理哪個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù),就把對(duì)應(yīng)的數(shù)據(jù)庫(kù)更改為
13、默認(rèn)數(shù)據(jù)庫(kù),如pubs),然后點(diǎn)下一步 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (windows xp )n直接點(diǎn)完成 n點(diǎn)擊測(cè)試數(shù)據(jù)源,測(cè)試是否連接成功。至此數(shù)據(jù)源建立完畢。點(diǎn)擊確定按鈕退出此對(duì)話框 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w創(chuàng)建和執(zhí)行創(chuàng)建和執(zhí)行jdbc語(yǔ)句語(yǔ)句nstatement對(duì)象可將簡(jiǎn)單的查詢發(fā)送到數(shù)據(jù)庫(kù)。對(duì)象可將簡(jiǎn)單的查詢發(fā)送到數(shù)據(jù)庫(kù)。l創(chuàng)建一個(gè)創(chuàng)建一個(gè)statement對(duì)象對(duì)象l將想要執(zhí)行的將想要執(zhí)行的sql語(yǔ)句傳遞給適當(dāng)?shù)膱?zhí)行方法語(yǔ)句傳遞給適當(dāng)?shù)膱?zhí)行方法l執(zhí)行該執(zhí)行該stat
14、ement對(duì)象。對(duì)象。 如:如:statement stat = con.createstatement();n對(duì)于對(duì)于select語(yǔ)句,使用的方法是語(yǔ)句,使用的方法是executequery()n對(duì)于創(chuàng)建、插入或更新表的語(yǔ)句,使用的方法是對(duì)于創(chuàng)建、插入或更新表的語(yǔ)句,使用的方法是executeupdate()。 如:如: stat.executeupdate(sql); /sql字符串是一條字符串是一條sql語(yǔ)句語(yǔ)句 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w處理結(jié)果:處理結(jié)果:jdbc將結(jié)果集返回給resultset對(duì)象 resultset rs = stat.e
15、xecutequery(sql); /sql字符串是一條sql語(yǔ)句n resultset結(jié)果集對(duì)象所包含的常用方法如下:lnext():對(duì)象rs包含了結(jié)果集中顯示的表,將光標(biāo)移到下一行。w光標(biāo)初始定位于resultset對(duì)象第一行的上面w第一次調(diào)用next()將光標(biāo)移到第一行,使它成為當(dāng)前行。接下來(lái)調(diào)用next()將使光標(biāo)從上至下每次移動(dòng)一行。lgetstring()w常用于檢索char和varchar sql類型的數(shù)據(jù)w也能檢索其他基本sql類型的數(shù)據(jù)例:如果用它檢索numeric類型的數(shù)據(jù),getstring()將把numeric值轉(zhuǎn)換成java的string對(duì)象,這樣一來(lái),在數(shù)據(jù)要作為數(shù)
16、字前就必須轉(zhuǎn)換回numeric類型 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作ngetxxx():適當(dāng)類型的getxxx方法可用于檢索列中的數(shù)值,這里的xxx指列的數(shù)據(jù)類型l檢索varchar sql類型數(shù)值的方法是getstring()l檢索float類型數(shù)值的方法是getfloat()while (rs.next() /每次調(diào)用next(),下一行就成為當(dāng)前行,直到rs中再也沒(méi)有可向前移動(dòng)的行為止 string s = rs.getstring(strcolumnname1 ); float n = rs.getfloat(strcolumnname2); / st
17、rcolumnname1、 strcolumnname2都是sql字符串中的列名 system.out.println(s + + n);ljdbc使用兩種方法標(biāo)識(shí)getxxx方法檢索數(shù)值的列w指定列名w指定列索引(列的序號(hào)),i表示第i列 如:string s = rs.getstring(1); float n = rs.getfloat(2);6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w 與數(shù)據(jù)庫(kù)連接及數(shù)據(jù)基本操作的步驟與數(shù)據(jù)庫(kù)連接及數(shù)據(jù)基本操作的步驟n創(chuàng)建數(shù)據(jù)源n建立數(shù)據(jù)庫(kù)連接 class.forname(sun.jdbc.odbc.jdbcodbcdrvier
18、); connection con = drivermanager.getconnection (url,“數(shù)據(jù)庫(kù)用戶名”, “密碼); n創(chuàng)建和執(zhí)行jdbc語(yǔ)句:statement stat = con.createstatement(); n執(zhí)行jdbc語(yǔ)句,得到處理結(jié)果resultset rsstat.executequery (sql); while (rs.next() 變量名rs.get(列名或列索引);n關(guān)閉連接: con.close6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作【應(yīng)用擴(kuò)展】【應(yīng)用擴(kuò)展】w 使用預(yù)備語(yǔ)句使用預(yù)備語(yǔ)句nstatement對(duì)象是可以
19、將簡(jiǎn)單的查詢發(fā)送到數(shù)據(jù)庫(kù)n發(fā)送帶參數(shù)的查詢語(yǔ)句到數(shù)據(jù)庫(kù),可以使用preparedstatement對(duì)象l包含一條預(yù)編譯過(guò)的sql語(yǔ)句ldbms不必編譯就可直接運(yùn)行preparedstatement的sql語(yǔ)句l代替statement對(duì)象一般會(huì)縮短執(zhí)行時(shí)間lpreparedstatement對(duì)象可用于不帶參數(shù)的sql語(yǔ)句,但在多數(shù)場(chǎng)合是用于帶參數(shù)的sql語(yǔ)句。6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作【應(yīng)用擴(kuò)展】【應(yīng)用擴(kuò)展】 使用預(yù)備語(yǔ)句使用預(yù)備語(yǔ)句其用法如下:string strsql=update coffees set sales = ? where cof_nam
20、e like ?;preparedstatement stat = con.preparestatement(strsql);stat.setint(1, 75);/給上面的sql語(yǔ)句的第一個(gè)問(wèn)號(hào)賦值stat.setstring(2, colombian);/給上面的sql語(yǔ)句的第二個(gè)問(wèn)號(hào)賦值stat.executeupdate();/相當(dāng)于執(zhí)行update coffees set sales = 75 where cof_name like colombian可用該對(duì)象制作成模板實(shí)現(xiàn)一次構(gòu)造多條帶參數(shù)的sql語(yǔ)句,簡(jiǎn)化編碼。6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作【
21、應(yīng)用擴(kuò)展】【應(yīng)用擴(kuò)展】 executeupdate方法的返回值方法的返回值 executequery返回一個(gè)resultset對(duì)象 executeupdate返回的是一個(gè)整數(shù)值,指出了表中已更新的行數(shù)。如果executeupdate的返回值為0表明 執(zhí)行的語(yǔ)句是一不影響任何行的更新語(yǔ)句 執(zhí)行的是一無(wú)返回內(nèi)容的 sql 語(yǔ)句,比如dll語(yǔ)句 sql與與java的數(shù)據(jù)類型 sql數(shù)據(jù)類型與java的數(shù)據(jù)類型不一致 在使用java類型的應(yīng)用程序與使用sql類型的數(shù)據(jù)庫(kù)之間,需要某種讀寫類型轉(zhuǎn)換機(jī)制 resultset類的“get”系列方法 statement及其子類的“set”系列方法都有可能要用到
22、數(shù)據(jù)轉(zhuǎn)換 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作項(xiàng)目項(xiàng)目43 使用純使用純java jdbc 實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接及更新實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接及更新jdbc-odbc橋?qū)dbc數(shù)據(jù)轉(zhuǎn)換為odbc數(shù)據(jù)源,然后用odbc與數(shù)據(jù)連接,速度比較慢。純java jdbc驅(qū)動(dòng)程序用純java 語(yǔ)言編寫?yīng)毩⒌膉dbc驅(qū)動(dòng)程序直接與數(shù)據(jù)連接與數(shù)據(jù)庫(kù)進(jìn)行通信的整個(gè)過(guò)程均由java語(yǔ)言實(shí)現(xiàn),而不通過(guò)橋接或中間件來(lái)存取數(shù)據(jù)庫(kù)缺點(diǎn):需要下載相應(yīng)的類包不同數(shù)據(jù)庫(kù)的連接代碼可能不同 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作項(xiàng)目項(xiàng)目43 使用純使用純java jdbc 實(shí)現(xiàn)
23、與數(shù)據(jù)庫(kù)的連接及更新實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的連接及更新jdbc-odbc橋?qū)dbc數(shù)據(jù)轉(zhuǎn)換為odbc數(shù)據(jù)源,然后用odbc與數(shù)據(jù)連接,速度比較慢。純java jdbc驅(qū)動(dòng)程序用純java 語(yǔ)言編寫?yīng)毩⒌膉dbc驅(qū)動(dòng)程序直接與數(shù)據(jù)連接與數(shù)據(jù)庫(kù)進(jìn)行通信的整個(gè)過(guò)程均由java語(yǔ)言實(shí)現(xiàn),而不通過(guò)橋接或中間件來(lái)存取數(shù)據(jù)庫(kù)缺點(diǎn):需要下載相應(yīng)的類包不同數(shù)據(jù)庫(kù)的連接代碼可能不同 w 使用純java jdbc驅(qū)動(dòng)程序連接數(shù)據(jù)庫(kù) n裝載驅(qū)動(dòng)程序l在程序中,利用class.forname()方法加載指定的驅(qū)動(dòng)程序class.forname(com.microsoft.jdbc.sqlserver.sqlserverdriv
24、er); l注意:連接不同的數(shù)據(jù)庫(kù)時(shí),加載的驅(qū)動(dòng)程序有所不同。n建立與數(shù)據(jù)庫(kù)的連接l首先創(chuàng)建指定數(shù)據(jù)庫(kù)的urljdbc:subprotlcol:subname:/hostname:port;databasename=xxxljdbc表示當(dāng)前通過(guò)java數(shù)據(jù)庫(kù)連接進(jìn)行數(shù)據(jù)庫(kù)訪問(wèn)lsubprotocal表示某種驅(qū)動(dòng)程序支持的數(shù)據(jù)庫(kù)連接機(jī)制lsubname表示在當(dāng)前連接機(jī)制下的具體名稱lhostname表示主機(jī)名。port表示相應(yīng)的連接端口ldatabasename是要連接的數(shù)據(jù)庫(kù)的名稱。例如:string url=jdbc: sqlserver:/localhost:1433;databasena
25、me=pubs; /pubs為數(shù)據(jù)庫(kù)名string user=“sa”; /用戶名 string password=; /密碼connection conn= drivermanager.getconnection(url,user,password);6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w創(chuàng)建存儲(chǔ)過(guò)程創(chuàng)建存儲(chǔ)過(guò)程ncallablestatement 對(duì)象為所有的 dbms 提供了一種以標(biāo)準(zhǔn)形式調(diào)用已儲(chǔ)存過(guò)程的方法n創(chuàng)建一個(gè)存儲(chǔ)過(guò)程: create procedure publishers_titles as select pub_name,title from
26、publishers,titles where publishers.pub_id=titles.pub_id order by titlen將sql語(yǔ)句放到一個(gè)字符串中,然后賦給變量createprocedure以備后用:string createprocedure =” create procedure publishers_titles as select pub_name,title from publishers,titles where publishers.pub_id=titles.pub_id order by title”n使用connection對(duì)象con來(lái)創(chuàng)建state
27、ment對(duì)象,用于把創(chuàng)建存儲(chǔ)過(guò)程的sql語(yǔ)句發(fā)送給數(shù)據(jù)庫(kù):statement stmt = con.createstatement(); stmt.executeupdate(createprocedure);n存儲(chǔ)過(guò)程publishers_titles將作為一個(gè)可調(diào)用的數(shù)據(jù)庫(kù)對(duì)象在數(shù)據(jù)庫(kù)中編譯并存儲(chǔ),調(diào)用時(shí)就像調(diào)用其他方法一樣 6.1與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫(kù)的連接及數(shù)據(jù)的基本操作w從從jdbc調(diào)用存儲(chǔ)過(guò)程調(diào)用存儲(chǔ)過(guò)程n創(chuàng)建一個(gè)callablestatement對(duì)象l利用一個(gè)打開的connection對(duì)象即可完成創(chuàng)建lcallablestatement對(duì)象包含了存儲(chǔ)過(guò)程的一個(gè)調(diào)用
28、;但它不包含存儲(chǔ)過(guò)程本身 如:callablestatement cs = con.preparecall(call publishers_titles );resultset rs = cs.executequery() n注意l用于執(zhí)行cs的方法是executequery,因?yàn)閏s調(diào)用的存儲(chǔ)過(guò)程包含一個(gè)查詢,執(zhí)行后產(chǎn)生一個(gè)結(jié)果集l如果存儲(chǔ)過(guò)程包含一條更新或一條dll語(yǔ)句:executeupdate方法l如果存儲(chǔ)過(guò)程包含多條sql語(yǔ)句,產(chǎn)生了多個(gè)結(jié)果集:execute方法6.2 結(jié)果集元數(shù)據(jù)結(jié)果集元數(shù)據(jù) 項(xiàng)目項(xiàng)目44 獲取數(shù)據(jù)表的基本信息獲取數(shù)據(jù)表的基本信息w 結(jié)果集元數(shù)據(jù)(resultse
29、tmetadata)包含結(jié)果集的相關(guān)信息如字段名和字段類型。w 根據(jù)結(jié)果集的元數(shù)據(jù),可以得到一個(gè)查詢結(jié)果集關(guān)于查詢表中列的個(gè)數(shù)、各個(gè)列名、類型以及各個(gè)列的寬度等w resultsetmetadata的對(duì)象可以由resultset對(duì)象的getmetadata()方法得到。w 在使用結(jié)果集前,需要知道記錄的行列數(shù)n此類信息存儲(chǔ)在結(jié)果集元數(shù)據(jù)中n使用結(jié)果集中的成員方法“getmetadata()”,便可得到結(jié)果集元數(shù)據(jù)。resultsetmetadata rsmd = results.getmetadata(); numcols = rsmd.getcolumncount();/從結(jié)果集元數(shù)據(jù)中取得
30、列數(shù) 6.2 結(jié)果集元數(shù)據(jù)結(jié)果集元數(shù)據(jù)項(xiàng)目項(xiàng)目44 獲取數(shù)據(jù)表的基本信息獲取數(shù)據(jù)表的基本信息resultsetmetadata主要主要方法方法主要功能主要功能getcolumncount()返回目前resultset對(duì)象的列數(shù)getcolumndisplaysize(int column)返回column指定的列的最大寬度getcolumnlabel(int column)返回column指定列的標(biāo)簽getcolumnname(int column)返回column指定列的列名getcolumntype(int)返回指定號(hào)數(shù)的字段類型6.2 結(jié)果集元數(shù)據(jù)結(jié)果集元數(shù)據(jù)【應(yīng)用擴(kuò)展】【應(yīng)用擴(kuò)展】 w 數(shù)據(jù)庫(kù)元數(shù)據(jù)(databasemetadata)n包含數(shù)據(jù)庫(kù)的有關(guān)信息如表名、表索引、數(shù)據(jù)庫(kù)產(chǎn)品名和版本號(hào)、數(shù)據(jù)庫(kù)支持的操作等等。ndatabasemetadata對(duì)象的創(chuàng)建如下: databasemetadata dma = con.getmetadata(); /con是connection的一個(gè)對(duì)象 6.2 結(jié)果集元數(shù)據(jù)結(jié)果集元數(shù)據(jù) 【應(yīng)用擴(kuò)展】【應(yīng)用擴(kuò)展】 databasemetadata類類主要主要方法方法主要
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 借錢擔(dān)保合同范本
- 廠區(qū)電線維修合同范本
- 付費(fèi)攝影合同范本
- 中醫(yī)工作計(jì)劃
- 個(gè)體戶減稅申請(qǐng)書
- 個(gè)人能力提升計(jì)劃書
- 1+X糧農(nóng)證書模擬考試題與答案
- 農(nóng)村老舊木材收購(gòu)合同范本
- 二手車出售合同范本
- 七夕情人節(jié)活動(dòng)策劃方案
- 現(xiàn)代文閱讀《有聲電影》答案詳細(xì)解析
- 銷售合同模板英文銷售合同模板
- 大學(xué)計(jì)算機(jī)基礎(chǔ)(Windows10+Office2016)PPT完整全套教學(xué)課件
- 精素材:描寫植物的好詞好句好段
- 【高中語(yǔ)文】《登岳陽(yáng)樓》課件17張+統(tǒng)編版高中語(yǔ)文必修下冊(cè)
- 華師大版八年級(jí)數(shù)學(xué)下冊(cè)全冊(cè)教案
- 四下語(yǔ)文學(xué)情分析-2
- 家園合作培養(yǎng)幼兒勞動(dòng)行為習(xí)慣的行動(dòng)研究
- 中國(guó)的能源安全 課件
- 鄭州市某路雨水污水改造工程施工組織設(shè)計(jì)
- 對(duì)口升學(xué)計(jì)算機(jī)組裝試卷答案
評(píng)論
0/150
提交評(píng)論