




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第七章JDBC預(yù)習(xí)檢查JDBC的主要作用是什么?JDBC訪問數(shù)據(jù)時(shí)常用的類和接口有哪些,它們的作用是什么?JDBC訪問數(shù)據(jù)的步驟是什么?PreparedStatement與Statement相比,具有什么優(yōu)勢(shì)?集中測(cè)試2/35回顧與作業(yè)點(diǎn)評(píng)為什么要進(jìn)行用戶權(quán)限管理?如何實(shí)現(xiàn)創(chuàng)建用戶并授權(quán)?普通用戶是否可以修改root用戶密碼?轉(zhuǎn)賬過程為什么需要進(jìn)行事務(wù)處理?提問作業(yè)點(diǎn)評(píng)點(diǎn)評(píng)作業(yè)的提交情況和共性問題3/35本章任務(wù)使用純Java方式連接數(shù)據(jù)庫(kù)使用JDBC查詢所有寵物主人信息使用JDBC插入寵物信息4/35本章目標(biāo)理解JDBC原理掌握Connection接口的使用掌握Statement接口的使用掌握ResultSet接口的使用掌握PreparedStatement接口的使用5/35為什么需要JDBCJDBC是Java數(shù)據(jù)庫(kù)連接技術(shù)的簡(jiǎn)稱,提供連接各種常用數(shù)據(jù)庫(kù)的能力Java應(yīng)用程序JDBCJDBCJSP/Servlet客戶端數(shù)據(jù)庫(kù)服務(wù)器應(yīng)用服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器客戶端6/35JDBC的工作原理JDBCAPI提供者:Sun公司內(nèi)容:供程序員調(diào)用的接口與類,集成在java.sql和javax.sql包中,如:DriverManager類Connection接口Statement接口ResultSet接口DriverManager提供者:Sun公司作用:管理各種不同的JDBC驅(qū)動(dòng)JDBC驅(qū)動(dòng)提供者:數(shù)據(jù)庫(kù)廠商作用:負(fù)責(zé)連接各種不同的數(shù)據(jù)庫(kù)MySQLOracleJDBCAPIJDBCDriverManagerJDBC驅(qū)動(dòng)JDBC驅(qū)動(dòng)Java應(yīng)用程序7/35JDBCAPIJDBCAPI主要功能:與數(shù)據(jù)庫(kù)建立連接、執(zhí)行SQL語句、處理結(jié)果DriverManager:依據(jù)數(shù)據(jù)庫(kù)的不同,管理JDBC驅(qū)動(dòng)Connection:負(fù)責(zé)連接數(shù)據(jù)庫(kù)并擔(dān)任傳送數(shù)據(jù)的任務(wù)Statement:由Connection產(chǎn)生、負(fù)責(zé)執(zhí)行SQL語句ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果ConnectionDriverManagerStatementResultSet客戶端數(shù)據(jù)庫(kù)服務(wù)器12348/35try{Class.forName(JDBC驅(qū)動(dòng)類);}……try{Connectioncon=DriverManager.getConnection(URL,數(shù)據(jù)庫(kù)用戶名,密碼);
Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery("SELECTa,b,cFROMtable1;");
while(rs.next()){intx=rs.getInt("a");Strings=rs.getString("b");floatf=rs.getFloat("c");}rs.close();stmt.close();con.close();}……2、與數(shù)據(jù)庫(kù)建立連接3、發(fā)送SQL語句,并得到返回結(jié)果4、處理返回結(jié)果1、加載JDBC驅(qū)動(dòng)URL用來標(biāo)識(shí)數(shù)據(jù)庫(kù)5、釋放資源JDBC編程模板
與步驟類似9/35JDBC驅(qū)動(dòng)5-1JDBC驅(qū)動(dòng)由數(shù)據(jù)庫(kù)廠商提供在個(gè)人開發(fā)與測(cè)試中,可以使用JDBC-ODBC橋連方式在生產(chǎn)型開發(fā)中,推薦使用純Java驅(qū)動(dòng)方式DBServerDBServerJDBCAPIJDBCDriverManager純Java驅(qū)動(dòng)JDBC–ODBC橋Java應(yīng)用程序ODBC10/35JDBC驅(qū)動(dòng)5-2使用JDBC-ODBC橋方式連接數(shù)據(jù)庫(kù)將對(duì)JDBCAPI的調(diào)用,轉(zhuǎn)換為對(duì)另一組數(shù)據(jù)庫(kù)連接API的調(diào)用優(yōu)點(diǎn):可以訪問所有ODBC可以訪問的數(shù)據(jù)庫(kù)缺點(diǎn):執(zhí)行效率低、功能不夠強(qiáng)大JDBC-ODBC橋Java應(yīng)用程序JDBCAPIODBCAPIODBC層DBServer11/35JDBC驅(qū)動(dòng)5-3使用JDBC-ODBC進(jìn)行橋連配置數(shù)據(jù)源:控制面板ODBC數(shù)據(jù)源系統(tǒng)DNS編程獲取連接……Connectionconn=null;try{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver");}catch(ClassNotFoundExceptione){ ……}try{
conn=DriverManager.getConnection("jdbc:odbc:myDB","root","root");//省略代碼……}catch(SQLExceptione){ ……}finally{ try{ conn.close(); }catch(SQLExceptione){ …… }}關(guān)閉連接建立連接加載驅(qū)動(dòng)必須進(jìn)行相關(guān)異常處理12/35示例JDBC驅(qū)動(dòng)5-4使用純Java方式連接數(shù)據(jù)庫(kù)由JDBC驅(qū)動(dòng)直接訪問數(shù)據(jù)庫(kù)優(yōu)點(diǎn):完全Java代碼,快速、跨平臺(tái)缺點(diǎn):訪問不同的數(shù)據(jù)庫(kù)需要下載專用的JDBC驅(qū)動(dòng)JDBC
驅(qū)動(dòng)Java應(yīng)用程序JDBCAPIDBServer13/35JDBC驅(qū)動(dòng)5-5……Connectionconn=null;try{ Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){ ……}try{ conn=DriverManager.getConnection(
"jdbc:mysql://localhost:3306/epet","epetadmin","0000"); //省略代碼……}catch(SQLExceptione){ ……}finally{ try{ conn.close(); }catch(SQLExceptione){ …… }}關(guān)閉連接建立連接加載驅(qū)動(dòng)必須進(jìn)行相關(guān)異常處理演示示例1:使用純Java方式連接數(shù)據(jù)庫(kù)14/35示例學(xué)員操作——使用純Java方式連接數(shù)據(jù)庫(kù)需求說明數(shù)據(jù)庫(kù)為MySQL數(shù)據(jù)庫(kù)名“epet”,用戶名“epetadmin”,密碼“0000”使用純Java方式連接該數(shù)據(jù)庫(kù)如果連接成功,輸出“建立連接成功!”如果連接失敗,輸出“建立連接失敗!”進(jìn)行相關(guān)異常處理練習(xí)完成時(shí)間:20分鐘15/35常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解共性問題集中講解16/35JDBC應(yīng)用對(duì)寵物和主人信息進(jìn)行管理寵物和主人信息存儲(chǔ)在MySQL數(shù)據(jù)庫(kù)中通過JDBC對(duì)寵物和主人進(jìn)行增、刪、改、查字段名字段說明字段類型其他id編號(hào)INT主鍵、自增name昵稱VARCHAR(12)health健康值INTlove親密度INTstrain品種VARCHAR(20)字段名字段說明字段類型其他id編號(hào)INT主鍵、自增name姓名VARCHAR(12)password密碼VARCHAR(20)money元寶數(shù)INT17/35dogmaster使用Statement添加寵物……Connectionconn=null;Statementstmt=null;……//建立連接……stmt=conn.createStatement();StringBuffersbSql=newStringBuffer( "insertintodog(name,health,love,strain)values('");sbSql.append(name+"',");sbSql.append(health+",");sbSql.append(love+",'");sbSql.append(strain+"')");stmt.execute(sbSql.toString());…stmt.close();conn.close();執(zhí)行SQL語句獲取Statement對(duì)象關(guān)閉Statement對(duì)象聲明Statement變量示例也可使用:stmt.executeUpdate(sbSql.toString());演示示例2:使用Statement添加寵物18/35使用Statement更新寵物Connectionconn=null;Statementstmt=null;…//建立連接……//更新狗狗信息到數(shù)據(jù)庫(kù)stmt=conn.createStatement();Stringsql="updatedogsethealth=80,love=15whereid=1";intresult=stmt.executeUpdate(sql);…stmt.close();conn.close();示例執(zhí)行SQL語句獲取Statement對(duì)象關(guān)閉Statement對(duì)象聲明Statement變量更新、添加、刪除操作只是SQL語句不同演示示例3:使用Statement更新寵物19/35使用Statement和ResultSet查詢寵物Connectionconn=null;Statementstmt=null;ResultSetrs=null;…//建立連接……stmt=conn.createStatement();rs=stmt.executeQuery("select*fromdog");……while(
rs.next()
){ System.out.print(
rs.getInt(1)
+"\t"); System.out.print(
rs.getString(2)
+"\t"); System.out.print(rs.getInt("health")+"\t"); ……}……rs.close();stmt.close();conn.close();執(zhí)行SQL語句進(jìn)行查詢,結(jié)果賦給結(jié)果集變量rs注意關(guān)閉順序遍歷結(jié)果集可使用列號(hào)或列名標(biāo)識(shí)列ResultSet存在一個(gè)光標(biāo),光標(biāo)所指行為當(dāng)前行示例演示示例4:使用Statement和ResultSet查詢寵物20/35Statement常用方法方法名說明ResultSetexecuteQuery(Stringsql)執(zhí)行SQL查詢并獲取到ResultSet對(duì)象intexecuteUpdate(Stringsql)可以執(zhí)行插入、刪除、更新等操作,返回值是執(zhí)行該操作所影響的行數(shù)booleanexecute(Stringsql)可以執(zhí)行任意SQL語句,然后獲得一個(gè)布爾值,表示是否返回ResultSet21/35ResultSet常用方法方法名說明booleannext()將游標(biāo)從當(dāng)前位置向下移動(dòng)一行booleanprevious()游標(biāo)從當(dāng)前位置向上移動(dòng)一行voidclose()關(guān)閉ResultSet對(duì)象intgetInt(intcolIndex)以int形式獲取結(jié)果集當(dāng)前行指定列號(hào)值intgetInt(StringcolLabel)以int形式獲取結(jié)果集當(dāng)前行指定列名值floatgetFloat(intcolIndex)以float形式獲取結(jié)果集當(dāng)前行指定列號(hào)值floatgetFloat(StringcolLabel)以float形式獲取結(jié)果集當(dāng)前行指定列名值StringgetString(intcolIndex)以String形式獲取結(jié)果集當(dāng)前行指定列號(hào)值StringgetString(StringcolLabel)以String形式獲取結(jié)果集當(dāng)前行指定列名值22/35學(xué)員操作——查詢所有寵物主人信息訓(xùn)練要點(diǎn)Statement接口ResultSet接口需求說明使用JDBC查詢數(shù)據(jù)表master中所有寵物主人信息并輸出指導(dǎo)講解需求說明23/35學(xué)員操作——查詢所有寵物主人信息實(shí)現(xiàn)思路調(diào)用executeQuery(Stringsql)查詢主人信息通過next()和getXxx()方法遍歷結(jié)果集并輸出指導(dǎo)完成時(shí)間:30分鐘24/35常見問題及解決辦法代碼規(guī)范問題調(diào)試技巧共性問題集中講解共性問題集中講解25/35為什么要使用PreparedStatement使用JDBC完成主人登錄驗(yàn)證功能演示示例5:SQL注入隱患Stringsql="select*frommasterwherename='"+name+"'andpassword='"+password+"'";System.out.println(sql);rs=stmt.executeQuery(sql);
正常登錄
非正常登錄SQL注入演示示例5:SQL注入隱患26/35示例提高了代碼的可讀性和可維護(hù)性PreparedStatement如何避免SQL注入的隱患?使用PreparedStatement接口繼承自Statement接口比Statement對(duì)象使用起來更加靈活,更有效率提高了SQL語句執(zhí)行的性能提高了安全性問題分析
PreparedStatement接口(預(yù)編譯的SQL語句)27/35使用PreparedStatement更新寵物Connectionconn=null;PreparedStatementpstmt=null;…//建立連接……//更新狗狗信息到數(shù)據(jù)庫(kù)Stringsql="updatedogsethealth=?,love=?whereid=?";pstmt=conn.prepareStatement(sql);pstmt.setInt(1,80);pstmt.setInt(2,15);pstmt.setInt(3,1);pstmt.executeUpdate();……pstmt.close();conn.close();聲明PreparedStatement變量創(chuàng)建PreparedStatement對(duì)象設(shè)置每個(gè)輸入?yún)?shù)的值執(zhí)行SQL語句示例使用占位符的SQL語句演示示例6:使用PreparedStatement更新寵物28/35學(xué)員操作——使用PreparedStatement插入寵物信息2-1訓(xùn)練要點(diǎn)PreparedStatement接口需求說明使用PreparedStatement接口向數(shù)據(jù)表dog中插入兩條狗狗的信息
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海洋油氣管道完整性管理考核試卷
- 油氣倉(cāng)儲(chǔ)環(huán)節(jié)的智能化發(fā)展路徑探索與研究考核試卷
- 熱電聯(lián)產(chǎn)在漁業(yè)養(yǎng)殖的實(shí)踐考核試卷
- 摩托車發(fā)動(dòng)機(jī)氣門座材料與耐磨性考核試卷
- 充電設(shè)施在公共交通領(lǐng)域的應(yīng)用考核試卷
- 玉米淀粉在植物組織培養(yǎng)中的培養(yǎng)基優(yōu)化與生長(zhǎng)促進(jìn)考核試卷
- 化工設(shè)備密封系統(tǒng)設(shè)計(jì)與應(yīng)用考核試卷
- 石油開采業(yè)的經(jīng)濟(jì)影響考核試卷
- 玻璃制品環(huán)境適應(yīng)性考核試卷
- 游藝用品的供應(yīng)鏈優(yōu)化與物流管理考核試卷
- GB 5908-2024阻火器
- 某醫(yī)院精神衛(wèi)生中心信息化建設(shè)方案
- 自編MSA(計(jì)數(shù)型)自動(dòng)分析表
- 購(gòu)房律師陪同服務(wù)合同
- 家用電動(dòng)啤酒釀造設(shè)備市場(chǎng)發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測(cè)報(bào)告
- GB/T 2624.6-2024用安裝在圓形截面管道中的差壓裝置測(cè)量滿管流體流量第6部分:楔形裝置
- 危重患者護(hù)理與觀察
- 2024年浙江省中考英語試題卷(含答案解析)
- 人教版(2019)必修 第二冊(cè)Unit 2 Wildlife Protection Reading for writing教學(xué)設(shè)計(jì)
- AIGC視域下非遺文創(chuàng)產(chǎn)品的數(shù)字化轉(zhuǎn)型升級(jí)路徑研究
- 推廣綠色用電活動(dòng)方案
評(píng)論
0/150
提交評(píng)論