Java面向對象程序設計案例教程課件:Java數據庫編程基礎_第1頁
Java面向對象程序設計案例教程課件:Java數據庫編程基礎_第2頁
Java面向對象程序設計案例教程課件:Java數據庫編程基礎_第3頁
Java面向對象程序設計案例教程課件:Java數據庫編程基礎_第4頁
Java面向對象程序設計案例教程課件:Java數據庫編程基礎_第5頁
已閱讀5頁,還剩35頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

Java數據庫編程基礎本講目標JDBC概述JDBC常用API(Driver、DriverManager、Connection、Statement、ResultSet)連接數據庫的基本過程執行查詢語句處理數據集應用JDBC訪問SQLServer數據庫2JDBC概述概述(什么是JDBC)java數據庫連接(JavaDatabaseConnectivity,JDBC)是一種用于執行SQL語句的JavaAPI,由一組用Java編程語言編寫的類和接口組成。JDBC為數據庫開發人員提供了一組標準的API,使他們能夠用純JavaAPI來編寫數據庫應用程序。3JDBC概述JDBC的目的? 推廣java的應用。 設計出一種通用的數據庫訪問接口。使應用程序開發人員使用JDBC可以連接任何提供了JDBC驅動程序的數據庫系統。JDBC的用途是什么? 簡單地說,JDBC可做三件事: 數據庫建立連接。 發送SQL語句。 處理結果。

4JDBC概述JDBC工作原理JDBC有兩部分組成,第一部分是供程序員調用的API,另一部分是需要數據庫廠商實現的SPI(ServlceProviderInterface,數據庫廠商需要實現的接口),也就是驅動程序。java/web應用程序JDBCMysqlOracledb2Mysql驅動Oracle驅動db2驅動5JDBC常用API常用的類或者接口作用DriverManager類驅動管理類,支持驅動器和數據庫連接的創建Connection接口代表與某一數據庫的連接Statement接口在連接中執行SQL并取得執行結構PreparedStatement接口是Statement的子接口,代表預編譯的SQL聲明CallableStatement接口是Statement的子接口,代表SQL的存儲過程ResultSet接口代表執行SQL后產生的數據庫結果集6JDBC常用APIDriverManager DriverManager類是JDBC的管理層,作用于用戶和驅動程序之間。它跟蹤可用的驅動程序,并在數據庫和相應驅動程序之間建立連接。 對于簡單的應用程序,一般程序員需要在此類中直接使用的唯一方法是DriverManager.getConnection。正如名稱所示,該方法將建立與數據庫的連接。JDBC允許用戶調用DriverManager的方法getDriver、getDrivers和registerDriver及Driver的方法connect。但多數情況下,讓DriverManager類管理建立連接的細節為上策。7JDBC常用APIDriverManagerDriverManager類包含一個Driver類,它們已通過調用方法DriverManager.registerDriver對自己進行了注冊。所有Driver類都必須包含有一個靜態部分。它創建該類的實例,然后在加載該實例時DriverManager類進行注冊。這樣,用戶正常情況下將不會直接調用DriverManager.registerDriver;而是在加載驅動程序時由驅動程序自動調用。加載Driver類,然后自動在DriverManager中注冊 可以通過如下方式:Class.forName("jdbc:sqlserver://ip:port;databaseName=TestDB”) 通過調用方法Class.forName。這將顯式地加載驅動程序類。由于這與外部設置無關,因此推薦使用這種加載驅動程序的方法。8JDBC常用APIDriverManager加載Driver類并在DriverManager類中注冊后,它們即可用來與數據庫建立連接。當調用DriverManager.getConnection方法發出連接請求時,DriverManager將檢查每個驅動程序,查看它是否可以建立連接。 以下代碼是通常情況下用驅動程序建立連接所需所有步驟的示例:9JDBC常用APIDriverManager//加裁驅動程序并自動注冊連接實例Class.forName(“com.microsoft.sqlserver.dbc.SQLServerDriver");//設置URLStringurl="jdbc:sqlserver://ip:port;databaseName=TestDB";//設置用戶名和密碼Stringusername=“sa";Stringpassword=“sasa";//通過DriverManager向DB發出連接請求,獲得連接對象Connectionconn=DriverManager.getConnection(url,username,password);10JDBC常用APIConnection與數據庫的連接對象Connection對象代表與數據庫的連接。連接過程包括所執行的SQL語句和在該連接上所返回的結果。一個應用程序可與單個數據庫有一個或多個連接,或者可與許多數據庫有連接。Connectioncon=DriverManager.getConnection("jdbc:sqlserver://ip:port;databaseName=TestDB",“sa",“sasa");11JDBC常用APIConnection什么是JDBCURLJDBCURL提供了一種標識數據庫的方法,可以使相應的驅動程序能識別該數據庫并與之建立連接。實際上,驅動程序編程人員將決定用什么JDBCURL來標識特定的驅動程序。用戶不必關心如何來形成JDBCURL;他們只須使用與所用的驅動程序一起提供的URL即可。JDBC的作用是提供某些約定,驅動程序編程人員在構造他們的JDBCURL時應該遵循這些約定。JDBCURL的標準語法如下所示。它由三部分組成,各部分間用冒號分隔:jdbc:<子協議>:<子名稱>12JDBC常用APIStatement作用:完成發送SQL文SQL語句連接一旦建立,就可用來向它所涉及的數據庫傳送SQL語句。JDBC對可被發送的SQL語句類型不加任何限制。這就提供了很大的靈活性,即允許使用特定的數據庫語句或甚至于非SQL語句。然而,它要求用戶自己負責確保所涉及的數據庫可以處理所發送的SQL語句,否則將自食其果。例如,如果某個應用程序試圖向不支持儲存程序的DBMS發送儲存程序調用,就會失敗并將拋出異常。JDBC提供了三個類,用于向數據庫發送SQL語句。Statement、PreparedStatement、CallableStatement13JDBC常用APIStatementConnection接口中的三個方法可用于創建這些類的實例。Statement─由方法createStatement所創建。Statement對象用于發送簡單的SQL語句。14JDBC常用APIStatement Statement對象用于將SQL語句發送到數據庫中。實際上有三種Statement對象,它們都作為在給定連接上執行SQL語句的包容器:Statement、PreparedStatement(從Statement繼承而來)和CallableStatement(從PreparedStatement繼承而來)。它們都專用于發送特定類型的SQL語句: Statement對象用于執行不帶參數的簡單SQL語句; PreparedStatement對象用于執行帶或不帶IN參數的預編譯SQL語句; CallableStatement對象用于執行對數據庫已存儲過程的調用。15JDBC常用APIStatement

Statement接口提供了執行語句和獲取結果的基本方法。PreparedStatement接口添加了處理IN參數的方法;而CallableStatement添加了處理OUT參數的方法。

16JDBC常用APIStatement創建Statement對象 建立了到特定數據庫的連接之后,就可用該連接發送SQL語句。Statement對象用Connection的方法createStatement創建,如下列代碼段中所示:Connectioncon=DriverManager.getConnection(url,“sa",“123456a?");Statementstmt=con.createStatement();/*為了執行Statement對象,被發送到數據庫的SQL語句將被作為參數提供給Statement的方法:*/ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMTable2");

17JDBC常用APIStatement使用Statement對象執行語句

Statement接口提供了三種執行SQL語句的方法:executeQuery、executeUpdate和execute。使用哪一個方法由SQL語句所產生的內容決定。方法executeQuery用于產生單個結果集的語句,例如SELECT語句。方法executeUpdate用于執行INSERT、UPDATE或DELETE語句以及SQLDDL(數據定義語言)語句,例如CREATETABLE和DROPTABLE。INSERT、UPDATE或DELETE語句的效果是修改表中零行或多行中的一列或多列。executeUpdate的返回值是一個整數,指示受影響的行數(即更新計數)。對于CREATETABLE或DROPTABLE等不操作行的語句,executeUpdate的返回值總為零。方法execute用于執行返回多個結果集、多個更新計數或二者組合的語句。18JDBC常用APIStatement關閉Statement對象 Statement對象將由Java垃圾收集程序自動關閉。而作為一種好的編程風格,應在不需要Statement對象時顯式地關閉它們。這將立即釋放DBMS資源,有助于避免潛在的內存問題。19JDBC常用APIResultSet定義:ResultSet包含符合SQL語句中條件的所有行,并且它通過一套get方法(這些get方法可以訪問當前行中的不同列)提供了對這些行中數據的訪問。ResultSet.next方法用于移動到ResultSet中的下一行,使下一行成為當前行。 結果集一般是一個表,其中有查詢所返回的列標題及相應的值。例如,如果查詢為SELECTname,age,jobsFROMTable1,則結果集將具有如下形式:

nameagejobsJerry80teacher20JDBC常用APIResultSet代碼示例:下面的代碼段是執行SQL語句的示例。該SQL語句將返回行集合,其中列name和jobs為varchar,列age為int。Statementstmt=conn.createStatement(); ResultSetrs=stmt.executeQuery(“SELECTname,age,jobsFROMTable1”); while(rs.next()){ //輸出當前行的值 Stringname=rs.getString(“name”); Stringjobs=rs.getString(“jobs”); intage=rs.getInt(“age”); }21連接數據庫的基本過程加載驅動建立數據庫連接發送sql語句處理結果集釋放資源22加載驅動1.絕對路徑引入2.使用類庫添加3.本項目內相對路徑引入創建連接創建數據庫連接需要使用到DriverManager類和Connection接口。DriverManager類負責根據已經加載的驅動程序,按照規定格式的URL去連接指定的數據庫,并且返回Connection類型對象。這里說的URL是根據各數據庫系統的不同,各廠商分別提供了合格的URL,參看表8-2。連接數據庫服務器我們還需要擁有合法的數據庫用戶名和密碼,如果其中涉及到空白密碼,需要用連續兩個雙引號表示空白字符,切記不能不寫或者寫null。Stringurl=”jdbc:sqlserver://localhost:1433;databaseName=TestDB”;Stringusername=”sa”;Stringpswd=”sasa”;Connectionconnection=DriverManager.getConnection(url,username,pswd);執行查詢語句JDBC中,使用Statement接口來執行靜態的SQL語句,Statement對象由Connection對象獲得。Statementstmt=connection.createStatement();獲得Statement對象后,可以分別使用executeUpdate和executeQuery的方法來執行增加、刪除、修改和查詢語句。Stringsql=”insertintotb_users(uname)values(‘tom’)”;intr=stmt.executeUpdate(sql);其中r表示sql變量所代表的SQL語句執行過后,數據表中改變的記錄數量。或者Stringsql=”selectuserid,unamefromtb_users”;ResultSetrs=stmt.executeQuery(sql);處理數據集//書寫查詢的SQL語句StringSQL="SELECTuserid,unameFROMtb_users";//獲得Statement對象Statementstmt=con.createStatement();//獲得查詢結果集ResultSetrs=stmt.executeQuery(SQL);//遍歷結果集while(rs.next()){//取出每一行中,兩個字段的數據值System.out.println(rs.getInt("userid")+""+rs.getString("uname"));}更新數據庫操作更新數據庫的操作由數據的插入(insert),刪除(delete),修改(update)構成,這三種操作都會修改數據庫的數據文件,可以理解為數據庫寫入操作。//書寫插入的SQL語句StringSQL="insertintotb_users(uname)values('lilei')";//獲得Statement對象stmt=con.createStatement();//獲得執行結果intresult=stmt.executeUpdate(SQL);//處理結果if(result>0){System.out.println("操作成功,影響"+result+"行記錄");}斷開與數據庫的連接作為程序編寫者,在程序完成對于數據庫的操作后,必須要關閉數據庫,釋放連接資源。關閉數據庫的步驟一般按照最先創建的最后關閉的順序來完成,對象的創建順序一般是Connection,Statement,ResultSet,所以關閉順序就是ResultSet,Statement,Connection。并且無論數據庫操作執行成功與否,都不能一直占用數據庫連接,所以關閉數據庫操作多數與finally塊聯合使用。finally{//關閉ResultSetif(rs!=null)try{rs.close();}catch(Exceptione){ }//關閉Statementif(stmt!=null)try{stmt.close();}catch(Exceptione){}//關閉Connnectionif(con!=null)try{con.close();}catch(Exceptione){ }}應用JDBC訪問SQLServer數據庫第一步:導入java.sql包importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.Statement;第二步:加載驅動Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");方法參數中的字符串是驅動程序的全限定名,可以在驅動程序文檔或者驅動程序jar文件中找到。第三步:創建數據庫連接StringconnectionUrl="jdbc:sqlserver://localhost:1433;databaseName=TestDB";Connectioncon=DriverManager.getConnection(connectionUrl,"sa","sasa");創建連接時需要根據不同的數據庫系統編寫不同的連接URL,還需要數據庫管理員給定的用戶名和密碼方可完成。不同的數據庫的URL都有不同,參考驅動程序文檔和自帶的示例程序即可。第四步:創建Statement對象Statementstmt=con.createStatement();Statement對象是用來執行SQL語句的工具類對象,創建之前必須確定Connection對象已經初始化完畢。第五步:書寫SQL語句StringSQL="insertintotb_users(uname)values('lilei')";作為基礎教學來說,固定值的SQL語句是讀者必須要掌握的技能,但在實際應用中,這種類型的SQL不多。本次insert操作中,為uname字段指定了lilei的數據值,則本條SQL語句僅能夠完成固定值的插入,如何能夠在SQL語句中加入變量?一般的解決方法是將原有SQL語句進行拆分后,連入變量,再重新組合成完整的SQL語句,所用到的技術是Java語言字符串的拼接操作,具體原理請看下圖:用變量s表示”lilei”,SQL語句由3部分拼接而成,第一部分是SQL語句的固定部分,第二部分是變量s,第三部分還是SQL語句的固定部分。要特別注意的是第一部分結尾和第三部分開頭的單引號,一定不能省略,這種SQL語句拼接需要同時滿足Java中字符串的格式規定和SQL語句的語法規定。第六步:執行SQL語句in

溫馨提示

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

評論

0/150

提交評論