Java程序的設計的項目化教程教學資源模塊6——Java數(shù)據(jù)庫編程_第1頁
Java程序的設計的項目化教程教學資源模塊6——Java數(shù)據(jù)庫編程_第2頁
Java程序的設計的項目化教程教學資源模塊6——Java數(shù)據(jù)庫編程_第3頁
Java程序的設計的項目化教程教學資源模塊6——Java數(shù)據(jù)庫編程_第4頁
Java程序的設計的項目化教程教學資源模塊6——Java數(shù)據(jù)庫編程_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、模塊模塊6Java數(shù)據(jù)庫編程數(shù)據(jù)庫編程主講教師:成奮華6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作項目項目42 使用使用JDBC-ODBC橋接實現(xiàn)與數(shù)據(jù)橋接實現(xiàn)與數(shù)據(jù)庫的連接及查詢數(shù)據(jù)表中的數(shù)據(jù)庫的連接及查詢數(shù)據(jù)表中的數(shù)據(jù) w JDBC的基本功能的基本功能 w Java DataBase Connectivity,Java數(shù)據(jù)庫數(shù)據(jù)庫連接連接w 由一組用由一組用Java編程語言編寫的類和接口組編程語言編寫的類和接口組成,是一種可用于執(zhí)行成,是一種可用于執(zhí)行SQL語句的語句的Java API w 在在java.sql包中定義包中定義 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)

2、據(jù)庫的連接及數(shù)據(jù)的基本操作w JDBC API 中定義的主要類w 數(shù)據(jù)庫驅動程序管理器類DriverManager w 在用戶程序和數(shù)據(jù)庫系統(tǒng)之間維護著與數(shù)據(jù)庫驅動程序之間的連接 w 實現(xiàn)驅動程序的裝載 w 創(chuàng)建與數(shù)據(jù)庫系統(tǒng)連接的Connection類對象 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作DriverManager類的常用方法方法主要功能主要功能void deregisterDriver(Driverdriver)從 DriverManager 的列表中刪除一個驅動程序Connection getConnection(Stringurl)建立到給定數(shù)據(jù)庫 UR

3、L 的連接Connection getConnection(Stringurl, Propertiesinfo)建立到給定數(shù)據(jù)庫 URL 的連接Connection getConnection(Stringurl, Stringuser, Stringpassword)建立到給定數(shù)據(jù)庫 URL 的連接Driver:每個驅動程序類必須實現(xiàn)的接口 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作Driver getDriver (Stringurl)查找能理解給定 URL 的驅動程序Enumeration getDrivers()獲取帶有當前調(diào)用者可以訪問的所有當前已加載 JDB

4、C 驅動程序的 Enumerationint getLoginTimeout()獲取驅動程序試圖登錄到某一數(shù)據(jù)庫時可以等待的最長時間,以秒為單位。void registerDriver (Driverdriver)向 DriverManager 注冊給定驅動程序void setLoginTimeout (intseconds)設置驅動程序試圖連接到某一數(shù)據(jù)庫時將等待的最長時間,以秒為單位。6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作類類Connection用于管理到指定數(shù)據(jù)庫的用于管理到指定數(shù)據(jù)庫的連接連接 方法方法主要功能主要功能void clearWarning()清

5、除為此 Connection 對象報告的所有警告SQLWarning getWarnings()獲取此 Connection 對象上的調(diào)用報告的第一個警告void close()即釋放此 Connection 對象的數(shù)據(jù)庫和 JDBC 資源boolean isClosed() 查詢此 Connection 對象是否已經(jīng)被關閉void commit()使所有上一次提交/回滾后進行的更改成為持久更改,并釋放此 Connection 對象當前持有的所有數(shù)據(jù)庫鎖。6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作Statement createStatement (intresultS

6、etType, intresultSetConcurrency)創(chuàng)建一個 Statement 對象,該對象將生成具有給定類型和并發(fā)性的 ResultSet 對象Statement用于執(zhí)行靜態(tài) SQL 語句并返回它所生成結果的對象 resultSetType包括:TYPE_FORWARD_ONLY 1003 指針只能向前移動TYPE_SCROLL_INSENSITIVE 1004指針可滾動但通常不受其他的更改影響TYPE_SCROLL_SENSITIVE 1005指針可滾動并且通常受其他的更改影響resultSetConcurrency包括CONCUR_READ_ONLY 1007 不可以更新C

7、ONCUR_UPDATABLE 1008 可以更新 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作Statement createStatement()創(chuàng)建一個 Statement 對象來將 SQL 語句發(fā)送到數(shù)據(jù)庫String getCatalog()獲取此 Connection 對象的當前目錄名稱void setCatalog (Stringcatalog)設置給定目錄名稱DatabaseMetaData getMetaData()獲取一個 DatabaseMetaData 對象,該對象包含關于此 Connection 對象所連接的數(shù)據(jù)庫的元數(shù)據(jù)接口 DatabaseM

8、etaData數(shù)據(jù)庫元數(shù)據(jù))關于數(shù)據(jù)庫的整體綜合信息 元數(shù)據(jù):描述數(shù)據(jù)及其環(huán)境的數(shù)據(jù)能提供基于用戶的信息能支持系統(tǒng)對數(shù)據(jù)的管理和維護 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作boolean isReadOnly()查詢此 Connection 對象是否處于只讀模式void setReadOnly (booleanreadOnly)將此連接設置為只讀模式CallableStatement prepareCall(Stringsql)創(chuàng)建一個 CallableStatement 對象來調(diào)用數(shù)據(jù)庫存儲過程CallableStatement:用于執(zhí)行 SQL 存儲過程的接口P

9、reparedStatement:表示預編譯的 SQL 語句的對象 PreparedStatement prepareStatement(Stringsql)創(chuàng)建一個 PreparedStatement 對象來將參數(shù)化的 SQL 語句發(fā)送到數(shù)據(jù)庫void rollback()取消在當前事務中進行的所有更改,并釋放此 Connection 對象當前持有的所有數(shù)據(jù)庫鎖6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作wJDBC訪問數(shù)據(jù)庫的兩種方式訪問數(shù)據(jù)庫的兩種方式w利用數(shù)據(jù)庫產(chǎn)品的面向利用數(shù)據(jù)庫產(chǎn)品的面向ODBC驅動程序,驅動程序,在在JDBC和和ODBC之間建立之間建立JDBC

10、- ODBC橋,在橋,在Java程序中基于程序中基于JDBC- ODBC橋橋的方式訪問數(shù)據(jù)庫的方式訪問數(shù)據(jù)庫w基于特定數(shù)據(jù)庫產(chǎn)品的基于特定數(shù)據(jù)庫產(chǎn)品的JDBC驅動程序,驅動程序,在在Java應用程序中利用應用程序中利用JDBC數(shù)據(jù)驅動數(shù)據(jù)驅動程序直接與數(shù)據(jù)庫連接程序直接與數(shù)據(jù)庫連接 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w建立數(shù)據(jù)庫連接建立數(shù)據(jù)庫連接 w首先必須通過首先必須通過java.lang.Class類的類的forName()動態(tài)加載動態(tài)加載驅動程序類,加載驅動器的語句為:驅動程序類,加載驅動器的語句為:w Class.forName(sun.jdbc.odb

11、c.JdbcOdbcDrvier);w再向再向DriverManager注冊注冊JDBC驅動程序,用驅動程序,用DriverManager類中的類中的getConnection()方法建立與數(shù)方法建立與數(shù)據(jù)庫的連接。據(jù)庫的連接。w Connection con=DriverManager.getConnection(url, 數(shù)據(jù)庫的用戶名數(shù)據(jù)庫的用戶名,密碼密碼);w url是由三部分組成,是提供識別數(shù)據(jù)庫方式的串:是由三部分組成,是提供識別數(shù)據(jù)庫方式的串::w 例:如果數(shù)據(jù)源是例:如果數(shù)據(jù)源是MyDataSource,則,則url可以寫成:可以寫成:w jdbc:odbc:MyDataSo

12、urce6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (Windows XP )w 打開控制面版打開控制面版性能和維護性能和維護管理工具管理工具數(shù)據(jù)源數(shù)據(jù)源(ODBC)w 在在“用戶用戶DSN中單擊添加按鈕中單擊添加按鈕 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (Windows XP )w 選擇選擇SQL Server,點擊完成按鈕,點擊完成按鈕 w 在名稱欄內(nèi)寫上數(shù)據(jù)源的名字,如在名稱欄內(nèi)寫上數(shù)據(jù)源的名字,如MyDataSource 服務如果是用服務如果是用本機的話就直接

13、寫上本機的話就直接寫上“.”號就可以了,如果是用別的服務器,請?zhí)柧涂梢粤?,如果是用別的服務器,請單擊下拉按鈕選擇。然后單擊下一步單擊下拉按鈕選擇。然后單擊下一步 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (Windows XP )w 可以選擇使用用戶輸入登錄的可以選擇使用用戶輸入登錄的ID和密碼的和密碼的SQL Server驗證,然后驗證,然后設置登錄設置登錄SQL的用戶名和密碼,如用戶名為的用戶名和密碼,如用戶名為sa,密碼為空,密碼為空,然后點然后點下一步下一步 w 更改默認的數(shù)據(jù)庫你處理哪個數(shù)據(jù)庫中的數(shù)據(jù),就把對應的數(shù)更改默認

14、的數(shù)據(jù)庫你處理哪個數(shù)據(jù)庫中的數(shù)據(jù),就把對應的數(shù)據(jù)庫更改為默認數(shù)據(jù)庫,如據(jù)庫更改為默認數(shù)據(jù)庫,如pubs),然后點下一步),然后點下一步 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w 創(chuàng)建數(shù)據(jù)源的步驟創(chuàng)建數(shù)據(jù)源的步驟 (Windows XP )w 直接點完成直接點完成 w 點擊測試數(shù)據(jù)源,測試是否連接成功。至此數(shù)據(jù)源建立完畢。點擊測試數(shù)據(jù)源,測試是否連接成功。至此數(shù)據(jù)源建立完畢。點擊確定按鈕退出此對話框點擊確定按鈕退出此對話框 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w創(chuàng)建和執(zhí)行創(chuàng)建和執(zhí)行JDBC語句語句wStatement對象可將簡單的查詢發(fā)送

15、到數(shù)據(jù)庫。對象可將簡單的查詢發(fā)送到數(shù)據(jù)庫。w創(chuàng)建一個創(chuàng)建一個Statement對象對象w將想要執(zhí)行的將想要執(zhí)行的SQL語句傳遞給適當?shù)膱?zhí)行方法語句傳遞給適當?shù)膱?zhí)行方法w執(zhí)行該執(zhí)行該Statement對象。對象。w 如:如:Statement stat = con.createStatement();w對于對于SELECT語句,使用的方法是語句,使用的方法是executeQuery()w對于創(chuàng)建、插入或更新表的語句,使用的方法是對于創(chuàng)建、插入或更新表的語句,使用的方法是executeUpdate()。w 如:如: stat.executeUpdate(sql); /sql字符串是一條字符串是一條

16、SQL語句語句 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w處理結果:處理結果:JDBC將結果集返回給將結果集返回給ResultSet對象對象w ResultSet rs = stat.executeQuery(sql); /sql字符串是一條字符串是一條SQL語句語句w ResultSet結果集對象所包含的常用方法如下:結果集對象所包含的常用方法如下:wnext():對象:對象rs包含了結果集中顯示的表,將光標移到下一行。包含了結果集中顯示的表,將光標移到下一行。w光標初始定位于光標初始定位于ResultSet對象第一行的上面對象第一行的上面w第一次調(diào)用第一次調(diào)用ne

17、xt()將光標移到第一行,使它成為當前行。接下將光標移到第一行,使它成為當前行。接下來調(diào)用來調(diào)用next()將使光標從上至下每次移動一行。將使光標從上至下每次移動一行。wgetString()w常用于檢索常用于檢索CHAR和和VARCHAR SQL類型的數(shù)據(jù)類型的數(shù)據(jù)w也能檢索其他基本也能檢索其他基本SQL類型的數(shù)據(jù)類型的數(shù)據(jù)w例:如果用它檢索例:如果用它檢索numeric類型的數(shù)據(jù),類型的數(shù)據(jù),getString()將把將把numeric值轉換成值轉換成Java的的String對象,這樣一來,在數(shù)據(jù)要作為對象,這樣一來,在數(shù)據(jù)要作為數(shù)字前就必須轉換回數(shù)字前就必須轉換回numeric類型類型

18、6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作ngetXXX():適當類型的getXXX方法可用于檢索列中的數(shù)值,這里的XXX指列的數(shù)據(jù)類型n檢索VARCHAR SQL類型數(shù)值的方法是getString()n檢索float類型數(shù)值的方法是getFloat()nwhile (rs.next() n/每次調(diào)用next(),下一行就成為當前行,直到rs中再也沒有可向前移動的行為止n String s = rs.getString(strColumnName1 );n float n = rs.getFloat(strColumnName2);n / strColumnName1、

19、 strColumnName2都是sql字符串中的列名n System.out.println(s + + n);nnJDBC使用兩種方法標識getXXX方法檢索數(shù)值的列n指定列名n指定列索引列的序號),i表示第i列n 如:String s = rs.getString(1); float n = rs.getFloat(2);6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w 與數(shù)據(jù)庫連接及數(shù)據(jù)基本操作的步驟與數(shù)據(jù)庫連接及數(shù)據(jù)基本操作的步驟w 創(chuàng)建數(shù)據(jù)源創(chuàng)建數(shù)據(jù)源w 建立數(shù)據(jù)庫連接建立數(shù)據(jù)庫連接w Class.forName(sun.jdbc.odbc.JdbcOdbcDr

20、vier); w Connection con = DriverManager.getConnectionw (url,“數(shù)據(jù)庫用戶名數(shù)據(jù)庫用戶名”, “密碼密碼); w 創(chuàng)建和執(zhí)行創(chuàng)建和執(zhí)行JDBC語句語句:Statement stat = con.createStatement(); w 執(zhí)行執(zhí)行JDBC語句,得到處理結果語句,得到處理結果w ResultSet rsstat.executeQuery (sql); w while (rs.next() w 變量名變量名rs.get(列名或列索引列名或列索引);w 關閉連接關閉連接: con.close6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與

21、數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作【應用擴展】【應用擴展】w 使用預備語句使用預備語句w Statement對象是可以將簡單的查詢發(fā)送到數(shù)據(jù)庫對象是可以將簡單的查詢發(fā)送到數(shù)據(jù)庫w 發(fā)送帶參數(shù)的查詢語句到數(shù)據(jù)庫,可以使用發(fā)送帶參數(shù)的查詢語句到數(shù)據(jù)庫,可以使用PreparedStatement對象對象w 包含一條預編譯過的包含一條預編譯過的SQL語句語句w DBMS不必編譯就可直接運行不必編譯就可直接運行PreparedStatement的的SQL語語句句w 代替代替Statement對象一般會縮短執(zhí)行時間對象一般會縮短執(zhí)行時間w PreparedStatement對象可用于不帶參數(shù)的對象可用于不帶參數(shù)

22、的SQL語句,但語句,但在多數(shù)場合是用于帶參數(shù)的在多數(shù)場合是用于帶參數(shù)的SQL語句。語句。6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作【應用擴展】【應用擴展】 使用預備語句其用法如下:使用預備語句其用法如下: String strSql=UPDATE COFFEES SET SALES = ? WHERE COF_NAME LIKE ?; PreparedStatement stat = con.prepareStatement(strSql); stat.setInt(1, 75);/給上面的給上面的SQL語句的第一個問號賦值語句的第一個問號賦值 stat.setStr

23、ing(2, Colombian);/給上面的給上面的SQL語句的第語句的第二個問號賦值二個問號賦值 stat.executeUpdate();/相當于執(zhí)行相當于執(zhí)行UPDATE COFFEES SET SALES = 75 WHERE COF_NAME LIKE Colombian 可用該對象制作成模板實現(xiàn)一次構造多條帶參數(shù)的可用該對象制作成模板實現(xiàn)一次構造多條帶參數(shù)的SQL語句,簡化編碼。語句,簡化編碼。6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作【應用擴展】【應用擴展】 executeUpdate方法的返回值方法的返回值 executeQuery返回一個返回一個Re

24、sultSet對象對象 executeUpdate返回的是一個整數(shù)值,指出了表中已更新的返回的是一個整數(shù)值,指出了表中已更新的行數(shù)。如果行數(shù)。如果executeUpdate的返回值為的返回值為0表明表明 執(zhí)行的語句是一不影響任何行的更新語句執(zhí)行的語句是一不影響任何行的更新語句 執(zhí)行的是一無返回內(nèi)容的執(zhí)行的是一無返回內(nèi)容的 SQL 語句,比如語句,比如DLL語句語句 SQL與與Java的數(shù)據(jù)類型的數(shù)據(jù)類型 SQL數(shù)據(jù)類型與數(shù)據(jù)類型與Java的數(shù)據(jù)類型不一致的數(shù)據(jù)類型不一致 在使用在使用Java類型的應用程序與使用類型的應用程序與使用SQL類型的數(shù)據(jù)庫之間,類型的數(shù)據(jù)庫之間,需要某種讀寫類型轉換機

25、制需要某種讀寫類型轉換機制 ResultSet類的類的“get系列方法系列方法 Statement及其子類的及其子類的“set系列方法系列方法 都有可能要用到數(shù)據(jù)轉換都有可能要用到數(shù)據(jù)轉換 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作項目項目43 使用純使用純Java JDBC 實現(xiàn)與數(shù)據(jù)庫的連實現(xiàn)與數(shù)據(jù)庫的連接及更新接及更新JDBC-ODBC橋將JDBC數(shù)據(jù)轉換為ODBC數(shù)據(jù)源,然后用ODBC與數(shù)據(jù)連接,速度比較慢。純Java JDBC驅動程序用純Java 語言編寫獨立的JDBC驅動程序直接與數(shù)據(jù)連接與數(shù)據(jù)庫進行通信的整個過程均由Java語言實現(xiàn),而不通過橋接或中間件來

26、存取數(shù)據(jù)庫缺點:需要下載相應的類包不同數(shù)據(jù)庫的連接代碼可能不同 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作項目項目43 使用純使用純Java JDBC 實現(xiàn)與數(shù)據(jù)庫的連實現(xiàn)與數(shù)據(jù)庫的連接及更新接及更新JDBC-ODBC橋將JDBC數(shù)據(jù)轉換為ODBC數(shù)據(jù)源,然后用ODBC與數(shù)據(jù)連接,速度比較慢。純Java JDBC驅動程序用純Java 語言編寫獨立的JDBC驅動程序直接與數(shù)據(jù)連接與數(shù)據(jù)庫進行通信的整個過程均由Java語言實現(xiàn),而不通過橋接或中間件來存取數(shù)據(jù)庫缺點:需要下載相應的類包不同數(shù)據(jù)庫的連接代碼可能不同 w 使用純Java JDBC驅動程序連接數(shù)據(jù)庫 w 裝載驅動程

27、序w 在程序中,利用Class.forName()方法加載指定的驅動程序w Class.forName(com.microsoft.jdbc.sqlserver.SQLServerDriver); w 注意:連接不同的數(shù)據(jù)庫時,加載的驅動程序有所不同。w 建立與數(shù)據(jù)庫的連接w 首先創(chuàng)建指定數(shù)據(jù)庫的URLw jdbc:subProtlcol:subNamehostname:port;DatabaseName=XXXw JDBC表示當前通過Java數(shù)據(jù)庫連接進行數(shù)據(jù)庫訪問w subProtocal表示某種驅動程序支持的數(shù)據(jù)庫連接機制w subName表示在當前連接機制下的具體名稱w hostnam

28、e表示主機名。port表示相應的連接端口w DatabaseName是要連接的數(shù)據(jù)庫的名稱。例如:w String url=jdbc: sqlserverlocalhost:1433;DatabaseName=pubs; w /pubs為數(shù)據(jù)庫名w String user=“sa”; /用戶名 w String password=; /密碼w Connection conn= DriverManager.getConnection(url,user,password);6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w創(chuàng)建存儲過程創(chuàng)建存儲過程wCallableStatemen

29、t 對象為所有的對象為所有的 DBMS 提供了一種以標準形提供了一種以標準形式調(diào)用已儲存過程的方法式調(diào)用已儲存過程的方法w創(chuàng)建一個存儲過程:創(chuàng)建一個存儲過程: w create procedure publishers_titles asw select pub_name,title from publishers,titlesw where publishers.pub_id=titles.pub_idw order by titlew將將SQL語句放到一個字符串中,然后賦給變量語句放到一個字符串中,然后賦給變量createProcedure以備后用:以備后用:wString createP

30、rocedure =” create procedure publishers_titles as select pub_name,title from publishers,titles where publishers.pub_id=titles.pub_id order by title”w使用使用Connection對象對象con來創(chuàng)建來創(chuàng)建Statement對象,用于把創(chuàng)建存對象,用于把創(chuàng)建存儲過程的儲過程的SQL語句發(fā)送給數(shù)據(jù)庫:語句發(fā)送給數(shù)據(jù)庫:wStatement stmt = con.createStatement(); stmt.executeUpdate(createPr

31、ocedure);w存儲過程存儲過程publishers_titles將作為一個可調(diào)用的數(shù)據(jù)庫對象在數(shù)將作為一個可調(diào)用的數(shù)據(jù)庫對象在數(shù)據(jù)庫中編譯并存儲,調(diào)用時就像調(diào)用其他方法一樣據(jù)庫中編譯并存儲,調(diào)用時就像調(diào)用其他方法一樣 6.1與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作與數(shù)據(jù)庫的連接及數(shù)據(jù)的基本操作w從從JDBC調(diào)用存儲過程調(diào)用存儲過程w創(chuàng)建一個創(chuàng)建一個CallableStatement對象對象w利用一個打開的利用一個打開的Connection對象即可完成創(chuàng)建對象即可完成創(chuàng)建wCallableStatement對象包含了存儲過程的一個調(diào)用;但它不包對象包含了存儲過程的一個調(diào)用;但它不包含存儲過程本身含存

32、儲過程本身 w如:如:CallableStatement cs = con.prepareCall(call publishers_titles );wResultSet rs = cs.executeQuery() w注意注意w用于執(zhí)行用于執(zhí)行cs的方法是的方法是executeQuery,因為,因為cs調(diào)用的存儲過程包含調(diào)用的存儲過程包含一個查詢,執(zhí)行后產(chǎn)生一個結果集一個查詢,執(zhí)行后產(chǎn)生一個結果集w如果存儲過程包含一條更新或一條如果存儲過程包含一條更新或一條DLL語句:語句:executeUpdate方方法法w如果存儲過程包含多條如果存儲過程包含多條SQL語句,產(chǎn)生了多個結果集:語句,產(chǎn)生了

33、多個結果集:execute方法方法6.2 結果集元數(shù)據(jù)結果集元數(shù)據(jù) 項目項目44 獲取數(shù)據(jù)表的基本信息獲取數(shù)據(jù)表的基本信息w 結果集元數(shù)據(jù)ResultSetMetaData包含結果集的相關信息如字段名和字段類型。w 根據(jù)結果集的元數(shù)據(jù),可以得到一個查詢結果集關于查詢表中列的個數(shù)、各個列名、類型以及各個列的寬度等w ResultSetMetaData的對象可以由ResultSet對象的getMetaData()方法得到。w 在使用結果集前,需要知道記錄的行列數(shù)w 此類信息存儲在結果集元數(shù)據(jù)中w 使用結果集中的成員方法“getMetaData()”,便可得到結果集元數(shù)據(jù)。w ResultSetMe

34、taData rsmd = results.getMetaData(); w numCols = rsmd.getColumnCount();/從結果集元數(shù)據(jù)中取得列數(shù) 6.2 結果集元數(shù)據(jù)結果集元數(shù)據(jù)項目項目44 獲取數(shù)據(jù)表的基本信息獲取數(shù)據(jù)表的基本信息ResultSetMetaData主要主要方法方法主要功能主要功能getColumnCount()返回目前ResultSet對象的列數(shù)getColumnDisplaySize(int column)返回column指定的列的最大寬度getColumnLabel(int column)返回column指定列的標簽getColumnName(int column)返回column指定列的列名getColumnType(int)返回指定號數(shù)的字段類型6.2 結果集元數(shù)據(jù)結果集元數(shù)據(jù)【應用擴展】【應用擴展】 w 數(shù)據(jù)庫元數(shù)據(jù)DatabaseMetaData)w 包含數(shù)據(jù)庫的有關信息如表名、表索引、數(shù)據(jù)庫產(chǎn)品名和版本號、數(shù)據(jù)庫支持的操作等等。w DatabaseM

溫馨提示

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

評論

0/150

提交評論