Java與數(shù)據(jù)庫JDBC-PPT課件_第1頁
Java與數(shù)據(jù)庫JDBC-PPT課件_第2頁
Java與數(shù)據(jù)庫JDBC-PPT課件_第3頁
Java與數(shù)據(jù)庫JDBC-PPT課件_第4頁
Java與數(shù)據(jù)庫JDBC-PPT課件_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第13章 Java與數(shù)據(jù)庫JDBC 姓名 性別 出生日期 職務(wù)王紅 女 75/03/05 工程師張強 男 70/06/15 講師李剛 男 70/07/09 工人王芳 女 65/10/09 工程師字段(列)記錄(行)表文件示例: 表文件與二維表對應(yīng)1、創(chuàng)建新表 student姓名性別年齡賈寶玉男21林黛玉女19豬八戒男22白骨精女202、追加新記錄命令格式: INSERT INTO 表名(字段名1,字段名2.) VALUES(表達式1,表達式2)功能: 在表尾追加一個新記錄,并直接饋入數(shù)據(jù)。說明:1.表不必是打開的,字段與表達式的類型必須相同。 2.如果字段名全部缺省,就必須按字段順序填寫 va

2、lues子句的所有表達式。 例:為剛建立學(xué)生信息表student(姓名,性別,年齡)填加數(shù)據(jù)insert into student values(白雪公主,女,16)insert into student (年齡,姓名) values (23,白馬王子)INSERT INTO 表名(字段名1,字段名2.) VALUES(表達式1,表達式2)3、用Select-SQL命令直接查詢簡化 Select-SQL命令格式:SELECT* / , . FROM 表名 WHERE AND 例1:在學(xué)生表student中,查找所有學(xué)生的姓名 select 姓名 from student 例:在學(xué)生表stude

3、nt(姓名,性別,年齡)中,查找所有學(xué)生的記錄 select * from student SELECT * / , . FROM 表名WHERE AND Where子句指定查詢條件:列名、比較運算符、列名于常數(shù) 常用的比較運算符: =、=、=、!=、 between and、and、or、not例2:在學(xué)生表student中,查詢所有年齡大于20的男同學(xué)的正確的SQL語句是Select * from student where 年齡20 and 性別=男SELECT * / , . FROM 表名WHERE AND 例3:在學(xué)生表student中,查詢年齡在20至23歲之間的學(xué)生姓名和年齡正

4、確的SQL語句是Select 姓名,年齡 from student where 年齡=20 and 年齡=23Select 姓名,年齡 from student where 年齡 between 20 and 23SELECT * / , . FROM 表名WHERE AND 4、更新記錄命令格式: Update 表名 set 字段名1=表達式1 ,字段名2=表達式2 .) where 聯(lián)結(jié)條件例: update student set 年齡=20 where 姓名=賈寶玉5、刪除記錄命令格式: delete * from 表名 where 聯(lián)結(jié)條件例: delete from student

5、 where 姓名=賈寶玉JDBC2019年夏,Sun公司推出了Java數(shù)據(jù)庫連接(Java Database Connectivity,JDBC)工具包的第一個版本。 該工具包使得程序員可以使用結(jié)構(gòu)化查詢語言(SQL)連接到一個數(shù)據(jù)庫,對數(shù)據(jù)庫進行查詢,或者對數(shù)據(jù)庫進行更新。 JDBC使得Java不僅能夠和遠程數(shù)據(jù)通信,也能夠在各種不同得數(shù)據(jù)源之間通信,從而擴大了Java這種跨平臺編程語言的應(yīng)用范圍,提高了它的應(yīng)用價值。 JDBC是Java程序連接和存取數(shù)據(jù)庫的應(yīng)用程序接口(API),它是Java核心API的一部分。 13.1.1 JDBC數(shù)據(jù)庫應(yīng)用模型JDBC由兩層組成,上面一層是JDBC

6、 API,下面一層是JDBC驅(qū)動程序API 。JDBC驅(qū)動程序 JDBC驅(qū)動程序按照連接方式的不同可以分為四種類型: Type 1:JDBC-ODBC BridgeType 2:Native API Bridge Type 3:JDBC-Middleware Type 4:Pure JDBC Driver JDBC的用途是什么? 簡單地說,JDBC可做三件事:與數(shù)據(jù)庫建立連接;發(fā)送SQL語句,處理結(jié)果。JDBC API在java.sql包中定義,其中包括JDBC API用到的所有類、接口和方法利用JDBC開發(fā)數(shù)據(jù)庫應(yīng)用的一般步驟 (1)建立與數(shù)據(jù)庫的連接(2)執(zhí)行SQL語句(3)處理結(jié)果集(4

7、)關(guān)閉數(shù)據(jù)庫的連接使用JDBC連接到數(shù)據(jù)庫步驟(1)建立與數(shù)據(jù)庫的連接A、加載JDBC驅(qū)動程序在使用JDBC驅(qū)動程序之前,先加載并注冊此驅(qū)動程序,若使用JDBC-ODBC橋,則為:Class.forName(“sun.jdbc.odbc.jdbcodbcDriver”);Class.forName(“oracle.jdbc.driver.OracleDriver”);(1)建立與數(shù)據(jù)庫的連接B、連接到數(shù)據(jù)庫使用DriverManager的getConnection()來連接到指定的數(shù)據(jù)庫,由于可能會同時使用不同的JDBC驅(qū)動程序,DriverManager會從已注冊的JDBC驅(qū)動程序中搜索合適

8、的驅(qū)動程序并連接到數(shù)據(jù)庫,若是使用JDBC-ODBC橋,則為:String url= “jdbc:oracle:student”Connection con = DriverManager.getConnection(url, “ ”, “”)使用JDBC連接到數(shù)據(jù)庫步驟數(shù)據(jù)庫URL的格式為:jdbc: 子協(xié)議odbc表示對ODBC數(shù)據(jù)源的訪問,其格式為: jdbc:odbc: 例如:String url = jdbc:odbc:people;使用JDBC連接到數(shù)據(jù)庫步驟DriverManager類的getConnection方法用于建立與某個數(shù)據(jù)源的連接。若與由URL指定的數(shù)據(jù)源建立連接成功

9、,則返回一個Connection類的對象。以后對于這個數(shù)據(jù)源的操作都是基于這個對象。getConnection方法是DriverManager類中的靜態(tài)方法。 其中,getConnection()的第1個參數(shù)是數(shù)據(jù)庫URL,第2個為用戶名字,第3個為密碼。例如:Connection con = DriverManager.getConnection(url, “sa”, “”)使用JDBC連接到數(shù)據(jù)庫步驟(2)將SQL語句送至數(shù)據(jù)庫,執(zhí)行SQL語句A、創(chuàng)建Statement對象 建立了到特定數(shù)據(jù)庫的連接之后,就可用該連接發(fā)送SQL語句。Statement對象用Connection的方法crea

10、teStatement創(chuàng)建,如下列代碼段中所示:Connectioncon=DriverManager.getConnection(url,sunny,);Statementstmt=con.createStatement();使用JDBC連接到數(shù)據(jù)庫步驟(2)將SQL語句送至數(shù)據(jù)庫,執(zhí)行SQL語句B、發(fā)送Statement對象SQL語句 為了執(zhí)行Statement對象,被發(fā)送到數(shù)據(jù)庫的SQL語句將被作為參數(shù)提供給Statement的方法:ResultSetrs=stmt.executeQuery(“SELECT姓名,性別,年齡FROMstudent);使用JDBC連接到數(shù)據(jù)庫步驟(2)將SQ

11、L語句送至數(shù)據(jù)庫,執(zhí)行SQL語句C、使用Statement對象執(zhí)行語句 Statement接口提供了三種執(zhí)行SQL語句的方法:executeQuery、executeUpdate和execute。使用哪一個方法由SQL語句所產(chǎn)生的內(nèi)容決定。方法executeQuery用于產(chǎn)生單個結(jié)果集的語句,例如SELECT語句。使用JDBC連接到數(shù)據(jù)庫步驟(2)將SQL語句送至數(shù)據(jù)庫,執(zhí)行SQL語句C、使用Statement對象執(zhí)行語句方法executeUpdate用于執(zhí)行INSERT、UPDATE或DELETE語句以及SQLDDL(數(shù)據(jù)定義語言)語句方法execute用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或

12、二者組合的語句。 JDBC應(yīng)用 (2)將SQL語句送至數(shù)據(jù)庫,執(zhí)行SQL語句C、使用Statement對象執(zhí)行語句執(zhí)行語句的所有方法都將關(guān)閉所調(diào)用的Statement對象的當前打開結(jié)果集(如果存在)。這意味著在重新執(zhí)行Statement對象之前,需要完成對當前ResultSet對象的處理。使用JDBC連接到數(shù)據(jù)庫步驟(2)將SQL語句送至數(shù)據(jù)庫,執(zhí)行SQL語句D、使用Statement對象執(zhí)行語句語句完成對于返回一個結(jié)果集的executeQuery方法,在檢索完ResultSet對象的所有行時該語句完成。對于方法executeUpdate,當它執(zhí)行時語句即完成。但在少數(shù)調(diào)用方法execute的

13、情況中,在檢索所有結(jié)果集或它生成的更新計數(shù)之后語句才完成。使用JDBC連接到數(shù)據(jù)庫步驟(3)處理結(jié)果集讀入數(shù)據(jù)庫返回的結(jié)果結(jié)果集一般是一個表,其中有查詢所返回的列標題及相應(yīng)的值。例如,如果查詢?yōu)镾ELECT姓名,性別,年齡FROMstudent,則結(jié)果集將具有如下形式: 使用JDBC連接到數(shù)據(jù)庫步驟姓名性別年齡賈寶玉男21林黛玉女19豬八戒男22白骨精女20(3)處理結(jié)果集讀入數(shù)據(jù)庫返回的結(jié)果ResultSet:ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數(shù)據(jù)的訪問。ResultSet.next方法用于移

14、動到ResultSet中的下一行,使下一行成為當前行。 使用JDBC連接到數(shù)據(jù)庫步驟(3)處理結(jié)果集行和光標ResultSet維護指向其當前數(shù)據(jù)行的光標。每調(diào)用一次next方法,光標向下移動一行。最初它位于第一行之前,因此第一次調(diào)用next將把光標置于第一行上,使它成為當前行。隨著每次調(diào)用next導(dǎo)致光標向下移動一行,按照從上至下的次序獲取ResultSet行。在ResultSet對象或其父輩Statement對象關(guān)閉之前,光標一直保持有效 使用JDBC連接到數(shù)據(jù)庫步驟(3)處理結(jié)果集列 方法getXXX提供了獲取當前行中某列值的途徑。在每一行內(nèi),可按任何次序獲取列值。但為了保證可移植性,應(yīng)該

15、從左至右獲取列值,并且一次性地讀取列值。列名或列號可用于標識要從中獲取數(shù)據(jù)的列。例如,如果ResultSet對象rs的第二列名為“性別”,并將值存儲為字符串,則下列任一代碼將獲取存儲在該列中的值:Strings=rs.getString(“性別);Strings=rs.getString(2); 使用JDBC連接到數(shù)據(jù)庫步驟(3)處理結(jié)果集列 注意列是從左至右編號的,并且從列1開始。同時,用作getXXX方法的輸入的列名不區(qū)分大小寫。提供使用列名這個選項的目的是為了讓在查詢中指定列名的用戶可使用相同的名字作為getXXX方法的參數(shù)。使用JDBC連接到數(shù)據(jù)庫步驟(3)處理結(jié)果集讀入數(shù)據(jù)庫返回的結(jié)

16、果 由于是進行查詢的工作,因此會返回一個ResultSet對象,可使用while來讀出所返回的數(shù)據(jù).例如:ResultSetrs=stmt.executeQuery(“SELECT姓名,性別,年齡FROMxs);While (rs.next() 使用JDBC連接到數(shù)據(jù)庫步驟(4)關(guān)閉數(shù)據(jù)庫的連接關(guān)閉Statement對象:Statement對象將由Java垃圾收集程序自動關(guān)閉。而作為一種好的編程風(fēng)格,應(yīng)在不需要Statement對象時顯式地關(guān)閉它們。這將立即釋放DBMS資源,有助于避免潛在的內(nèi)存問題 使用JDBC連接到數(shù)據(jù)庫步驟(4)關(guān)閉數(shù)據(jù)庫的連接關(guān)閉 結(jié)果集;關(guān)閉 Statement對象;

17、關(guān)閉 連接;使用JDBC連接到數(shù)據(jù)庫步驟下面的代碼段是執(zhí)行SQL語句的示例。 java.sql.Statementstmt=conn.createStatement();ResultSetr=stmt.executeQuery(“ SELECT姓名,性別,年齡FROMstudent ”);int i=0;while(r.next()i=i+1;/打印當前行的值。Stringname=r.getString(姓名);Stringsex=r.getString(性別);floatage=r.getInt(年齡);System.out.println(ROW=+i+ name + sex + age

18、);使用JDBC連接到數(shù)據(jù)庫步驟實例:JDBCTest.javaimport java.sql.*;public class JDBCTestpublic static void main(String args)String url = jdbc:odbc:mydatabase; String query = SELECT * FROM student; try Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); catch(java.lang.ClassNotFoundException e) System.err.print(ClassNotFou

19、ndException: ); System.err.println(e.getMessage(); 加載JDBC-ODBC bridge 驅(qū)動程序;使用Class.forName 方法顯式加載驅(qū)動程序完成:建立操作數(shù)據(jù)庫的SQL語句;tryConnection con = DriverManager.getConnection (url); Statement stmt = con.createStatement ();ResultSet r = stmt.executeQuery (query);while(r.next() String r1=r.getString(姓名); Strin

20、g r3=r.getString(性別); int r2=r.getInt(年齡); System.out.println(r1+ +r2+ +r3); r.close();stmt.close();con.close(); catch (SQLException ex) System.out.println (n* SQLException caught *n); 實例:JDBCTest.javaString url = jdbc:odbc:mydatabase;創(chuàng)建statement對象發(fā)送SQL語句關(guān)閉通過JDBC訪問數(shù)據(jù)庫的基本流程 基本流程1建立ODBC數(shù)據(jù)源(可選) 2裝入JDBC

21、驅(qū)動程序 3建立連接4執(zhí)行SQL語句5檢索結(jié)果6關(guān)閉連接建立ODBC數(shù)據(jù)源(可選) 當使用JDBC-ODBC Bridge來建立連接時,必須先建立ODBC數(shù)據(jù)源。ODBC數(shù)據(jù)源的配置步驟: 打開Windows的“控制面板”,在“管理工具”中找到“數(shù)據(jù)源(ODBC)”建立ODBC數(shù)據(jù)源(可選)在“用戶DNS”選項卡的“用戶數(shù)據(jù)源”列表中,單擊“添加”按鈕,彈出“創(chuàng)建新數(shù)據(jù)源”對話框 建立ODBC數(shù)據(jù)源(可選)選擇創(chuàng)建“Microsoft Access Driver”類型的數(shù)據(jù)源,然后單擊“完成”按鈕,彈出“ODBC Microsoft Access安裝”對話框 建立ODBC數(shù)據(jù)源(可選)在此對話

22、框中,輸入數(shù)據(jù)源名稱,并單擊“創(chuàng)建”按鈕,彈出“新數(shù)據(jù)庫”對話框。如果事先已經(jīng)建立了數(shù)據(jù)庫,可以單擊“選擇”按鈕,并指明數(shù)據(jù)庫的存放路徑。 建立ODBC數(shù)據(jù)源(可選)在“新建數(shù)據(jù)庫”對話框中,輸入需要新建的數(shù)據(jù)庫名稱,選擇數(shù)據(jù)庫的保存路徑,然后單擊“確定”按鈕,返回“ODBC Microsoft Access安裝”對話框。在“ODBC Microsoft Access安裝”對話框中單擊“確定”按鈕,返回“ODBC數(shù)據(jù)源管理器”對話框,新添加的用戶數(shù)據(jù)源將出現(xiàn)在此對話框中。此時,單擊“確定”按鈕,新用戶數(shù)據(jù)源創(chuàng)建完成。數(shù)據(jù)源創(chuàng)建完成之后,便可以對這個數(shù)據(jù)源進行數(shù)據(jù)表的創(chuàng)建和修改,記錄的添加、修改

23、和刪除等數(shù)據(jù)庫操作。添加ODBC數(shù)據(jù)源import java.sql.*;public class JDBCInsertpublic static void main(String args) String url = jdbc:odbc:mydatabase; try Class.forName (sun.jdbc.odbc.JdbcOdbcDriver); catch(java.lang.ClassNotFoundException e) System.err.print(ClassNotFoundException: );System.err.println(e.getMessage()

24、; try stmt.executeQuery (insert into student values(美眉, 女, 18) ); stmt.close();con.close();catch (SQLException ex) System.out.println (n* SQLException caught *n); 實例:JDBCInsert.java插入記錄,無返回結(jié)果并注意單引號和雙引號思考此程序哪里有問題!更新數(shù)據(jù)import java.sql.*;public class JDBCUpdate public static void main(String args) Strin

25、g url = jdbc:odbc:student;try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);Connection con = DriverManager.getConnection(url);Statement stmt = con.createStatement();stmt.executeUpdate(update student set 年齡=80 where 姓名=美眉);stmt.close();con.close(); catch (Exception e) e.printStackTrace();刪除數(shù)據(jù)import jav

26、a.sql.*;public class JDBCDelete public static void main (String args ) try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); Connection con = DriverManager.getConnection(jdbc:odbc:mydatabase); Statement stmt = con.createStatement ( ); stmt.executeUpdate( delete * from student where name=美眉 ); con.close(

27、); catch (Exception e) e.printStackTrace( ); 這個程序的問題又出現(xiàn)在哪里?!JDBC API用到的類、接口和方法(1)驅(qū)動程序管理java.sql.Driver 驅(qū)動程序接口,是每個數(shù)據(jù)庫驅(qū)動器都要實現(xiàn)的接口。負責(zé)確認URL與驅(qū)動程序的匹配、建立到數(shù)據(jù)庫的連接等,其中的方法需要有相應(yīng)的驅(qū)動程序?qū)崿F(xiàn)。java.sql.DriverManager 提供管理一組JDBC驅(qū)動程序所需的基本服務(wù),包括加載所有數(shù)據(jù)庫驅(qū)動器,以及根據(jù)用戶的連接請求驅(qū)動相應(yīng)的數(shù)據(jù)庫驅(qū)動器建立連接。(2)數(shù)據(jù)庫連接 java.sql.Connection 表示到特定數(shù)據(jù)庫的連接,通過連接執(zhí)行SQL語句并獲取SQL語句執(zhí)行結(jié)果,其中的方法需要有相應(yīng)的驅(qū)動程序?qū)崿F(xiàn)。 (3)SQL語句 java.sql.Statement 為SQL語句提供一個容器,包括執(zhí)行SQL語句、取得查詢結(jié)果等方法。(4)數(shù)據(jù) java.sql.ResultSet 表示數(shù)據(jù)集的一個數(shù)據(jù)表,一般是在執(zhí)行SQL查詢語句時產(chǎn)生的,提供對結(jié)果集進行處理的手段。 13.2.2 常用的JDBC AP

溫馨提示

  • 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)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論