14jdbc使用JDBC訪問數(shù)據(jù)庫_第1頁
14jdbc使用JDBC訪問數(shù)據(jù)庫_第2頁
14jdbc使用JDBC訪問數(shù)據(jù)庫_第3頁
14jdbc使用JDBC訪問數(shù)據(jù)庫_第4頁
14jdbc使用JDBC訪問數(shù)據(jù)庫_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余55頁可下載查看

下載本文檔

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

文檔簡介

本章內(nèi)JDBC簡JDBC概JDBC的組使用 數(shù)據(jù)與數(shù)據(jù)庫建立連查詢數(shù)據(jù)處理結(jié)更新數(shù)據(jù)庫操參數(shù)的輸入和輸事務(wù)處2JDBC簡關(guān)系數(shù)據(jù)早期,各個(gè)數(shù)據(jù)庫廠商推出了眾多的數(shù)據(jù)庫系間使用不同的通信協(xié)議使得它們之間的互連成為一個(gè)棘手的問題,特別是當(dāng)用戶需要從客戶端不型數(shù)據(jù)庫都使用SQL語言執(zhí)行數(shù)據(jù)查詢和。3JDBC簡關(guān)系數(shù)據(jù)庫(續(xù) 使用不同的API編寫不同的數(shù)據(jù) 程序。在(OpenDataBaseConnection開放式數(shù)據(jù)庫連接)出現(xiàn) 于是,出現(xiàn)了ODBC41JDBC簡ODBC和 應(yīng)用程

數(shù)據(jù)51JDBC簡ODBC和即JavaDatabaseConnection,是按照ODBC的模javaAPI,這使得程序員可以面對(duì)統(tǒng)一的數(shù)據(jù)庫界面,61JDBC簡JDBC簡 中,其中java.sql屬于71JDBC簡JDBC-ODBC,B沒JDBCJDBCDriverManagerorDataSourceObject類型1JDBC-BridgePartialJavaJDBCDBClient類型2DBClient,B沒JDBCJDBCDriverManagerorDataSourceObject類型1JDBC-BridgePartialJavaJDBCDBClient類型2DBClient所以便攜性較差。如JDBC-Application-->JDBC-ODBC-->JDBC-ODBCLibrary--81JDBC簡部分Java技術(shù)的本地API驅(qū)動(dòng)程序來賴來賴p托本地的數(shù)據(jù)庫的客戶端代攜性較差。Application--->JDBC

JDBCJDBCJDBCDriverManagerorDataSourceObject型>NativeDatabaselibrary--->Dat型

JDBC-Bridge

PartialJDBCDriver DBClientDBClient比類型1DBClientDBClient

91JDBC簡全部基于Java技術(shù)的本地API驅(qū)動(dòng)程序據(jù)庫無關(guān)的協(xié)議和中間件服務(wù)器進(jìn)行通信,中間件給那務(wù)器再將客戶端的JDBC調(diào)用轉(zhuǎn)給那Application--->JDBC>javamiddleware---

JDBCJDBCJDBCDriverManagerorDataSourceObject具有最大的靈活性,通常供,是四種類型中最小的

PureJava JDBCDriver4

PureJDBCDriver DBDB

1JDBC簡全部基于Java技術(shù)的本地協(xié)議驅(qū)動(dòng)程序全部基于Java語言的。該類型的驅(qū)動(dòng)程序中包 據(jù)庫進(jìn)行通信。Application--->JDBC那具有最大的靈活性,通那

JDBCJDBCJDBCDriverManagerorDataSourceObject供,是四種類型中最小的

PureJava JDBCDriver4

PureJDBCDriver DBDB

JDBC簡注意Java應(yīng)用程Java應(yīng)用程數(shù)據(jù)ODBC數(shù)據(jù)特?cái)?shù)據(jù)ODBC數(shù)據(jù)特定驅(qū)動(dòng)程數(shù)據(jù)onnetServer數(shù)據(jù)pureJDBCJDBC類型類型類型APIBridgeJDBC-JDBCJDBC簡應(yīng)用程序使用 數(shù)據(jù)過程使用 數(shù)據(jù)與數(shù)據(jù)庫建立連加載數(shù)據(jù)庫驅(qū)動(dòng)程序DriverManager.registerDriver(驅(qū)動(dòng)程序?qū)嵗c數(shù)據(jù)庫建立連Connectionconn=2使用 數(shù)據(jù)JDBC-ODBC橋形式連接數(shù)//連接各種數(shù)據(jù)庫的dsnStringdbUrl="jdbc:odbc:dsn名稱";

有空 AccessDriver2使用 數(shù)據(jù)JDBC直連(連接類型4)形式連接數(shù)據(jù)//加載具體數(shù)據(jù)庫的驅(qū)動(dòng) 或 StringdbUrl= 2使用 數(shù)據(jù)例各數(shù)據(jù)的驅(qū)動(dòng)程序和url連接串連接連接SQL 2使用 數(shù)據(jù)Informix數(shù)據(jù)2使用 數(shù)據(jù)連接SQL 2使用 數(shù)據(jù)數(shù)據(jù) 關(guān)閉連2使用 數(shù)據(jù)查詢數(shù)據(jù)在JDBC中,數(shù)據(jù)庫查詢由實(shí)現(xiàn)接口StatementPreparedStatement、CallableStatement的對(duì)象完成(1)創(chuàng)建Statement對(duì)Statementstmt=conn.createStatement();ResultSetr=stmt.executeQuery("SELECTFROMbooksWHERE2使用 數(shù)據(jù)stmt.close();無用的ateent對(duì)象在 回收時(shí)會(huì)被自動(dòng)關(guān)閉但最好在使用完atent對(duì)象時(shí)立即關(guān)閉,以釋放資源。在關(guān)閉teent對(duì)象時(shí),其相應(yīng)的結(jié)果集也被關(guān)閉。2使用 數(shù)據(jù)注意Statement接口的executeQuery用來執(zhí)行一條查詢語以返回多個(gè)結(jié)果集,它的參數(shù)是一SQL語句的字錯(cuò)誤的SQL語句在執(zhí)行時(shí)會(huì)出現(xiàn)SQLException一個(gè)Statement對(duì)象在同一時(shí)刻只能對(duì)一個(gè)結(jié)果集2使用 數(shù)據(jù)處理結(jié)ResultSet接口的基本處理方ResultSet對(duì)象有一個(gè)指向當(dāng)前行的指針2使用 數(shù)據(jù)ResultSet對(duì)象執(zhí)行過 intsno=getInt("sno或Stringsname=getString("name");//或2使用 數(shù)據(jù)查詢語句執(zhí)行狀態(tài)的executeQuery(String用來執(zhí)行查詢語句,返回一個(gè)ResultSet對(duì)象executeUpdate(String用來執(zhí)行更新語句(如UPDATE、INSERTDELETE),返回更新的記錄2使用 數(shù)據(jù)例Statement的executeQuery(sql)方法Stringdburl="jdbc:odbc:Driver={ AccessDriverConnectionconn=Statementstmt=conn.createStatement();ResultSetrs=stmt.executeQuery("select*from{System.out.printf("%d}2使用 數(shù)據(jù)例Statement的executeUpdate(sql)方法String AccessConnectionconn=DriverManager.getConnection(dburl,"","");//Statementintsum=stmt.executeUpdate("updatestudentset '");//更新所有System.out.println("影響行數(shù)ResultSetrs=stmt.executeQuery("select*from{System.out.println(rs.getInt(1)+""+rs.getString(2)+""+}2使用 數(shù)據(jù)例Statement的executeUpdate(sql)方法INTEGER,nameVARCHAR(50),authorstmt.executeUpdate("insertintobooksvalues(4,' 刪除數(shù)據(jù)中的表2使用 數(shù)據(jù)例Statement的execute(sql)String AccessConnectionconn=DriverManager.getConnection(dburl,"","");//Statementbooleanresult=stmt.execute(“updatestudentset '");//更新所有System.out.println("結(jié)果ResultSetrs=stmt.executeQuery("select*from{System.out.println(rs.getInt(1)+""+rs.getString(2)+""+}2使用 數(shù)據(jù)主動(dòng)獲取查詢結(jié)果(Statement方法如果當(dāng)前結(jié)果是ResultSet類型,可以使getResultSet方法獲得當(dāng)前結(jié)果集,然后對(duì)其進(jìn)行如果當(dāng)前結(jié)果是一個(gè)更新記錄數(shù),可以使getUpdateCount方法獲得更新記錄數(shù)2使用 數(shù)據(jù)例Statement的主動(dòng)獲取查詢結(jié)果方String AccessConnectionconn=DriverManager.getConnection(dburl,"","");//Statementstmt.execute("select*fromstudent");//未接受返回//stmt.executeQuery("select*fromstudent");//也行ResultSetrs=stmt.getResultSet()獲取執(zhí)行sql后的結(jié)果集stmt.execute("deletefromstudentwhereintsum=stmt.getUpdateCount();//獲取執(zhí)行sql后的影響行2使用 數(shù)據(jù)Statement對(duì)象在每次執(zhí)行SQL語句時(shí),都要ResultSetr=stmt.executeQuery("SELECT*FROMstudentWHEREname='zhangsan'");r=stmt.executeQuery("SELECT*FROMstudentWHEREname='lisi'");r=stmt.executeQuery("SELECT*FROMstudentWHEREname='wangwu'");2使用 數(shù)據(jù)創(chuàng)建一個(gè)PreparedStatement對(duì)PreparedStatement對(duì)象的SQL語句可以接受參 epaedStateent對(duì)象上的查詢語句和更新語句都可以設(shè)置輸入?yún)?shù)。在生成edStatent對(duì)象時(shí),在L語句中用"?"標(biāo)明參數(shù),在執(zhí)行SQ語句前,可以使用styPreparedStatementpstmt=conn.prepareStatement("SELECTFROMstudentWHERE2使用 數(shù)據(jù)第一個(gè)參數(shù)代表要賦值的參數(shù)在SQL語句中的位置例 2使用 數(shù)據(jù)執(zhí)行查詢語ResultSetr=pstmt.executeQuery(上述語句可以執(zhí)行多次,而無需重新給出SQL語句executeQuery方法返回一個(gè)ResultSet對(duì)象PreparedStatement接口有一個(gè)不帶參數(shù)的方法,能夠返回多個(gè)結(jié)果集2使用 數(shù)據(jù)2使用 數(shù)據(jù)例String AccessConnectionconn=DriverManager.getConnection(dburl,"","");//user:adminPreparedStatementpstmt=conn.prepareStatement("SELECT*FROMstudentWHEREname=?"); ResultSetSystem.out.println("學(xué)號(hào) ResultSet 2使用 數(shù)據(jù)CallableStatement接 2使用 數(shù)據(jù)創(chuàng)建CallableStatement對(duì)CallableStatementcstmt=conn.prepareCall("{call參數(shù)是一個(gè)字符串 過程名稱}"Query1是數(shù)據(jù)庫中的一 過程名稱cstmt.setString(1,"parameter");ResultSetr=cstmt.executeQuery(2使用 數(shù)據(jù)接受輸出參 在執(zhí)行過程以后,可以使用getType方法獲取出參數(shù)的值,在方法中要獲取哪一個(gè)參數(shù)的值。如果一個(gè)過程既返回結(jié)果集,又返回輸出參數(shù),則在2使用 數(shù)據(jù)執(zhí) 過Resultr=cstmt.executeQuery( 對(duì)查詢結(jié)果的處理方法與PreparedStatement一樣cstmt.close(使用 數(shù)據(jù)過程例1.建 過createprocedureproc_student_info@snamechar(10)if@snameisnull ame,gradefromwheresc.sno=student.snoand oorderby{ Stringdburl="jdbc: Connectionconn=DriverManager.getConnection(dburl,"sa","");CallableStatementcstmt=conn.prepareCall("{callproc_student_info(?)}"); ResultSet{}}catch(Exceptione)事務(wù)處什么是事事務(wù)事務(wù)和程序是兩個(gè)概一個(gè)應(yīng)用程序通常包含多個(gè)事事務(wù)是恢復(fù)和并發(fā)控制的3務(wù)處如何定義事顯式方beginSQL語句SQL語句隱式方

beginSQL語句SQL語句3務(wù)處事務(wù)結(jié)事務(wù)正常結(jié) 事務(wù)異常終事務(wù)回滾到開始的狀3務(wù)處事務(wù)的ACID特性原子性一致性 型持續(xù)性3務(wù)處原子性事務(wù)是數(shù)據(jù)庫的邏輯工作事務(wù)中包含的諸操作要么做,要么一致性一致性狀數(shù)據(jù)庫中只包含成功事務(wù)提交的結(jié)不一致狀數(shù)據(jù)庫中包含失敗事務(wù)的3務(wù)處銀行轉(zhuǎn)賬:從帳號(hào)A中取出一萬元,存入帳號(hào)B定一個(gè)事務(wù),該事務(wù)包含兩個(gè)操作AB①A=A-②這兩個(gè)操作要么全做,要么全全做或者全不做,數(shù)據(jù)庫都處于一致性如果只做一個(gè)操作,數(shù)據(jù)庫就處于不一致3務(wù)處 并發(fā)執(zhí)行的各個(gè)事務(wù)之間不能相互干3務(wù)處①讀②讀③A①讀②讀③A←A-④寫回3務(wù)處持續(xù)也稱 性 3務(wù)處例修改學(xué)號(hào)為1,課程號(hào)為2的成績?yōu)橐慈珗?zhí)行,要么全部執(zhí)行,使用事務(wù)處理如下1.加載驅(qū)動(dòng)、建立連接 mit(false);//關(guān)閉自動(dòng)提3.執(zhí)行SQL語mit();//整體提mit(true);//打開自動(dòng)提 4據(jù)連接原預(yù)先建立一定數(shù)量的數(shù)據(jù)庫連接對(duì)象,當(dāng)客戶程序請(qǐng)求則建立一個(gè)物理連接。當(dāng)客戶程序關(guān)閉入池中,并不真正關(guān)閉。這樣提高了系統(tǒng)的性能4據(jù)連接池-優(yōu)使用連接池還可以顯著減少到運(yùn)行SQLServer的計(jì)算機(jī)的網(wǎng)絡(luò)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論