




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
目標(biāo)
了解JDBC簡介掌握JDBC的連接步驟掌握Connection對象的應(yīng)用掌握Statement對象的應(yīng)用掌握Recordset對象的應(yīng)用掌握事務(wù)機制7/20/20231什么是JDBC
JDBC,全稱為JavaDataBaseConnectivity它是一個面向?qū)ο蟮膽?yīng)用程序接口(API),通過它可訪問各類關(guān)系數(shù)據(jù)庫。JDBC也是java核心類庫的一部分。JDBC的最大特點是它獨立于具體的關(guān)系數(shù)據(jù)庫。JDBCAPI中定義了一些Java類分別用來表示與數(shù)據(jù)庫的連接(connections),SQL語句(SQLStatements)結(jié)果集(resultsets)以及其它的數(shù)據(jù)庫對象,使得Java程序能方便地與數(shù)據(jù)庫交互并處理所得的結(jié)果
7/20/20232JDBC簡介
與ODBC相類似,JDBC接口(API)也包括兩個層次:
面向應(yīng)用的API:JavaAPI,抽象接口,供應(yīng)用程序開發(fā)人員使用(連接數(shù)據(jù)庫,執(zhí)行SQL語句,獲得結(jié)果)
面向數(shù)據(jù)庫的API:JavaDriverAPI,供開發(fā)商開發(fā)數(shù)據(jù)庫驅(qū)動程序7/20/20233
數(shù)據(jù)庫訪問技術(shù)簡介
客戶機/服務(wù)器應(yīng)用程序數(shù)據(jù)庫編程ODBCJDBC兩個常用的API數(shù)據(jù)庫執(zhí)行SQL語句檢索查詢結(jié)果7/20/20234
JDBCJDBC(Java數(shù)據(jù)庫連接)(sun公司提供)Java應(yīng)用程序編程接口Java應(yīng)用程序數(shù)據(jù)庫插入修改刪除查詢7/20/20235JDBC主要對象
JDBC是JAVA程序連接數(shù)據(jù)庫的接口主要是三個對象:1Connection2Statement3ResultSet另外PreparedStatement用于執(zhí)行預(yù)編譯語句CallableStatement用于調(diào)用存儲過程7/20/20236
JDBC驅(qū)動程序的類型JDBC驅(qū)動程序的類型JDBC-ODBC橋驅(qū)動程序及ODBC驅(qū)動程序本地API部分Java驅(qū)動程序JDBC-Net純Java驅(qū)動程序本地協(xié)議純Java驅(qū)動程序7/20/20237JDBCdriver的類型共有四種類型的JDBCdriver:類型1JDBC-ODBCbridgedriver
這種類型的driver能使客戶端通過JDBC調(diào)用連接到一個使用ODBCdriver的數(shù)據(jù)庫。使用這類driver需要每個客戶端機器都裝上數(shù)據(jù)庫對應(yīng)的ODBCdriver
類型2部分Java、部分本機驅(qū)動程序
這種驅(qū)動使用Java實現(xiàn)與數(shù)據(jù)庫廠商專有API的混和形式來提供數(shù)據(jù)訪問。它比前一種方式要快。JDBC驅(qū)動將標(biāo)準(zhǔn)的JDBC調(diào)用轉(zhuǎn)變?yōu)閷?shù)據(jù)庫API的本地調(diào)用,該類型的驅(qū)動程序是本地部分Java技術(shù)性能的本機API驅(qū)動程序7/20/20238JDBCdriver的類型(續(xù))
類型3中間數(shù)據(jù)訪問服務(wù)器這種方式使用一個中間數(shù)據(jù)訪問服務(wù)器,通過這種服務(wù)器,它可以把Java客戶端連接到多個數(shù)據(jù)庫服務(wù)器上,這種方式不需要客戶端的數(shù)據(jù)庫驅(qū)動,而是使用網(wǎng)絡(luò)-服務(wù)器中間層來訪問一個數(shù)據(jù)庫類型4純Java驅(qū)動程序這種方式使用廠商專有的網(wǎng)絡(luò)協(xié)議把JDBCAPI調(diào)用轉(zhuǎn)換成直接的網(wǎng)絡(luò)調(diào)用,這種方式的本質(zhì)是使用套接字(Socket)進行編程。純Java驅(qū)動運行在客戶端,并且直接訪問數(shù)據(jù)庫,該類型的驅(qū)動程序是本地協(xié)議完全Java技術(shù)性能的驅(qū)動程序,同時它的使用也比較簡單,客戶端不需要安裝任何中間件或者運行庫7/20/20239
JDBC體系結(jié)構(gòu)2-1Java程序JDBC驅(qū)動程序數(shù)據(jù)庫SQL命令結(jié)果7/20/202310JDBC體系結(jié)構(gòu)2-2應(yīng)用層Driver
StatementResultSet
Connection
各接口驅(qū)動層7/20/202311JDBCURL
JDBCURL提供了一種標(biāo)識數(shù)據(jù)庫的方法,可以使相應(yīng)的驅(qū)動程序能識別該數(shù)據(jù)庫并與之建立連接。JDBC的作用是提供某些約定,驅(qū)動程序編程員在構(gòu)造它們的JDBCURL時應(yīng)該遵循這些約定JDBC
URL
應(yīng)允許驅(qū)動程序編程員將一切所需的信息編入其中,而無須要求用戶去做任何系統(tǒng)管理工作7/20/202312JDBCURL的標(biāo)準(zhǔn)語法JDBC
URL
的標(biāo)準(zhǔn)語法如下所示。它由以下幾個不風(fēng)組成,各部分間用冒號分隔:
jdbc:<
子協(xié)議
>:<
子名稱
>:<主機名>:<端口號>:<數(shù)據(jù)庫>jdbc
─
協(xié)議。JDBC
URL
中的協(xié)議總是
jdbc<子協(xié)議>
─
驅(qū)動程序名或數(shù)據(jù)庫連接機制的名稱<子名稱>
─
一種標(biāo)識數(shù)據(jù)庫的方法以O(shè)raclethin驅(qū)動為例:Stringurl="jdbc:oracle:thin:127.0.0.1:1521:dbname";7/20/202313JDBCURL的標(biāo)準(zhǔn)語法JDBC
URL
的標(biāo)準(zhǔn)語法如下所示。它由以下幾個不風(fēng)組成,各部分間用冒號分隔:
jdbc:<
子協(xié)議
>:<
子名稱
>:<主機名>:<端口號>:<數(shù)據(jù)庫>jdbc
─
協(xié)議。JDBC
URL
中的協(xié)議總是
jdbc<子協(xié)議>
─
驅(qū)動程序名或數(shù)據(jù)庫連接機制的名稱<子名稱>
─
一種標(biāo)識數(shù)據(jù)庫的方法以O(shè)raclethin驅(qū)動為例:Stringurl="jdbc:oracle:thin:127.0.0.1:1521:dbname";7/20/202314使用JDBC存取數(shù)據(jù)庫
1加載JDBCdriver;2在客戶程序與數(shù)據(jù)庫之間建立連接;3通過數(shù)據(jù)庫連接將SQL語句從Java程序傳到數(shù)據(jù)庫;4通過數(shù)據(jù)庫返回的記錄集得到所需的數(shù)據(jù);5如需要,再用修改后的數(shù)據(jù)更新數(shù)據(jù)庫;6操作結(jié)束,關(guān)閉連接7/20/202315JDBC程序訪問數(shù)據(jù)庫的步驟開始導(dǎo)入java.sql包加載并注冊驅(qū)動程序創(chuàng)建一個Connection對象創(chuàng)建一個Statement對象執(zhí)行語句關(guān)閉ResultSet對象關(guān)閉Statement對象關(guān)閉連接結(jié)束使用ResultSet對象7/20/2023161加載JDBCdriver
驅(qū)動程序一般都由數(shù)據(jù)庫廠商提供//1注冊,加載JDBC驅(qū)動
DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
7/20/2023172與數(shù)據(jù)庫建立連接使用DriverManager類的getConnection()方法可以與指定的數(shù)據(jù)庫建立連接。如:Stringurl="jdbc:oracle:thin:127.0.0.1:1521:stan";Stringusername="stan";Stringpassword="stan";
Connectionconn=null;//2與數(shù)據(jù)庫建立連接conn=DriverManager.getConnection(url,username,password);其中的username和password分別對應(yīng)所連數(shù)據(jù)庫的用戶名和口令。7/20/2023183.創(chuàng)建一個Statement對象
//3創(chuàng)建Statement對象
Statementstmt=conn.createStatement();建立了Statement對象后,就可以利用該對象,根據(jù)行指定的SQL語句,執(zhí)行對數(shù)據(jù)庫的操作7/20/2023194.執(zhí)行指定的SQL語句一旦建立了Statement對象后,就可以利用該對象的executeQuery()方法讓數(shù)據(jù)庫執(zhí)行指定的SQL語句。如://4執(zhí)行指定的sql語句Stringsql="selectempno,ename,salfromemp";ResultSetrs=stmt.executeQuery(sql);7/20/2023205.獲取結(jié)果集中的數(shù)據(jù)
調(diào)用ResultSet對象的next()方法得到該集合中新的一行。如果ResultSet集合多于一行,可以用一個循環(huán)將它取出如://5獲取結(jié)果集中的數(shù)據(jù)while(rs.next()){intno=rs.getInt("empno");Stringname=rs.getString("ename");System.out.println("EmpNo:"+no+"EmpName:"+name);}其中,ResultSet的getXXX()方法用于獲取該行中指定列的值。7/20/2023216.關(guān)閉數(shù)據(jù)庫連接對數(shù)據(jù)庫操作結(jié)束后,通常要依次關(guān)閉打開的ResultSet,Statement和Connection對象。如:
rs.close();stmt.close();conn.close();要注意的是,前面介紹的許多方法如executeQuery()和executeUpdate()等方法均會產(chǎn)生一個SQLException的異常,所以使用這些語句時要作相應(yīng)的異常處理7/20/202322
API小結(jié)Java.sql.DriverManagergetConnection(Stringurl,Stringuser,Stringpwd)//獲得連接registerDriver(Driverdriver)//注冊驅(qū)動Java.sql.ConnectioncreateStatement()//建立語句對象,以執(zhí)行sqlvoidclose()//關(guān)閉當(dāng)前連接Java.sql.StatementexecuteQuery(Stringsql)executeUpdate(Stringsql)booleanexecute(sql)如查返回結(jié)果集,則返回true,否則返回false7/20/202323API小結(jié)(續(xù))Java.sql.ResultSetbooleannext()//使當(dāng)前行下移getXxx(intcolumnNumber)//取指定列值getXxx(StringcolumnName)//取指定列名的值close()關(guān)閉7/20/202324PreparedStatement接口3-1PreparedStatement接口(預(yù)編譯的SQL語句)PreparedStatement用于提高運行時效率執(zhí)行PreparedStatement對象比執(zhí)行Statement對象快Statement接口7/20/202325PreparedStatement表示預(yù)編譯的SQL語句的對象。SQL語句被預(yù)編譯并且存儲在PreparedStatement對象中。然后可以使用此對象高效地多次執(zhí)行該語句
要多次執(zhí)行一個SQL語句,使用PreparedStatement
SQL語句在創(chuàng)建時提供參數(shù)在執(zhí)行PreparedStatement時,只傳遞參數(shù)值通過不同的參數(shù)值多次調(diào)用如://創(chuàng)建Statement對象,預(yù)編譯sql語句Stringsql=“updateempsetsal=sal+?whereempno=?”;pstmt=conn.prepareStatement(sql);7/20/202326為預(yù)編譯sql賦值
在創(chuàng)建PreparedStatement對象之后,必須為參數(shù)賦值使用setXXX方法如:
//為已經(jīng)預(yù)編譯的sql賦值pstmt.setInt(1,1);//為第一個參數(shù)(?)賦值1pstmt.setInt(2,7369);//為第二個參數(shù)(?)賦值73697/20/202327PreparedStatement與Statement無論多少次地使用同一個SQL命令,PreparedStatement都只對它解析和編譯一次。當(dāng)使用Statement對象時,每次執(zhí)行一個SQL命令時,都會對它進行解析和編譯使用PreparedStatement對象比使用Statement對象的速度更快。7/20/202328事務(wù)將一組語句組合起來,以便形成一個可以在所有語句都運行良好時進行提交的事務(wù),或者在其中的一個語句出現(xiàn)錯誤時,就像所有命令都沒有發(fā)出執(zhí)行那樣。也就是說:所有的語句都成功才算成功,一個語句失敗所有的都失敗,不允許其中一條語句成功,一條語句失敗將各個命令組合成
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建房橫梁出售合同范本
- 商標(biāo)使用協(xié)議合同范本
- 宣傳稿件印刷合同范本
- 品牌產(chǎn)品定制合同范本
- 口罩制作合同范本
- 電信外包員工合同范本
- 賣房返租合同范本
- 品牌商鋪轉(zhuǎn)讓合同范本
- 塑膠公司購銷合同范本
- 承包國道項目合同范本
- 校園消費進行時青春權(quán)益不掉隊-3·15消費者權(quán)益日教育宣傳主題班會課件
- 英語-安徽省滁州市2025年(屆)高三下學(xué)期第一次教學(xué)質(zhì)量監(jiān)測(滁州一模)試題和答案
- 污水處理設(shè)施運維服務(wù)投標(biāo)方案(技術(shù)標(biāo))
- 大數(shù)據(jù)技術(shù)在醫(yī)療健康領(lǐng)域的應(yīng)用方案設(shè)計
- 2025年全國教育工作會議學(xué)習(xí)心得
- 《酒店數(shù)字化運營概論》課件-項目四 任務(wù)1 酒店定價與收益管理
- 2025屆南通市高三第二次模擬考試數(shù)學(xué)試卷含解析
- 畫謎課件教學(xué)課件
- 【MOOC】現(xiàn)代郵政英語(English for Modern Postal Service)-南京郵電大學(xué) 中國大學(xué)慕課MOOC答案
- 大學(xué)生職業(yè)生涯規(guī)劃與就業(yè)創(chuàng)業(yè)指導(dǎo)(四川水利職業(yè)技術(shù)學(xué)院)知到智慧樹答案
- 《班組長培訓(xùn)》課件
評論
0/150
提交評論