版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
JDBC開發(fā)講師:1Tip:JDBC簡(jiǎn)介數(shù)據(jù)庫(kù)驅(qū)動(dòng)SUN公司為統(tǒng)一對(duì)數(shù)據(jù)庫(kù)的操作,定義了一套Java操作數(shù)據(jù)庫(kù)的規(guī)范,稱之為JDBC。MySQLOracleMySQL驅(qū)動(dòng)Oracle驅(qū)動(dòng)應(yīng)用程序MySQLOracleMySQL驅(qū)動(dòng)Oracle驅(qū)動(dòng)應(yīng)用程序JDBC2Tip:JDBC簡(jiǎn)介JDBC全稱為:JavaDataBaseConnectivity(java數(shù)據(jù)庫(kù)連接),它主要由接口組成。組成JDBC的2個(gè)包:
java.sql
javax.sql開發(fā)JDBC應(yīng)用需要以上2個(gè)包的支持外,還需要導(dǎo)入相應(yīng)JDBC的數(shù)據(jù)庫(kù)實(shí)現(xiàn)(即數(shù)據(jù)庫(kù)驅(qū)動(dòng))。3Tip:第一個(gè)JDBC程序編寫一個(gè)程序,這個(gè)程序從user表中讀取數(shù)據(jù),并打印在命令行窗口中。 一、搭建實(shí)驗(yàn)環(huán)境: 1、在mysql中創(chuàng)建一個(gè)庫(kù),并創(chuàng)建user表和插入表的數(shù)據(jù)。 2、新建一個(gè)Java工程,并導(dǎo)入數(shù)據(jù)驅(qū)動(dòng)。二、編寫程序,在程序中加載數(shù)據(jù)庫(kù)驅(qū)動(dòng) DriverManager.registerDriver(Driver
driver)三、建立連接(Connection) Connectionconn=DriverManager.getConnection(url,user,pass);
四、創(chuàng)建用于向數(shù)據(jù)庫(kù)發(fā)送SQL的Statement對(duì)象,并發(fā)送sql Statementst=conn.createStatement(); ResultSetrs=st.excuteQuery(sql);五、從代表結(jié)果集的ResultSet中取出數(shù)據(jù),打印到命令行窗口六、斷開與數(shù)據(jù)庫(kù)的連接,并釋放相關(guān)資源4Tip:程序詳解—DriverManagerJdbc程序中的DriverManager用于加載驅(qū)動(dòng),并創(chuàng)建與數(shù)據(jù)庫(kù)的鏈接,這個(gè)API的常用方法:DriverManager.registerDriver(newDriver()),注意:在實(shí)際開發(fā)中,并不推薦采用這個(gè)方法注冊(cè)驅(qū)動(dòng)。查看Driver的源代碼可以看到,如果采用此種方式,會(huì)導(dǎo)致驅(qū)動(dòng)程序加載兩次,也就是在內(nèi)存中會(huì)有兩個(gè)Driver對(duì)象。推薦方式:Class.forName(“com.mysql.jdbc.Driver”);采用此種方式不會(huì)導(dǎo)致驅(qū)動(dòng)對(duì)象在內(nèi)存中重復(fù)出現(xiàn),并且采用此種方式,程序僅僅只需要一個(gè)字符串,不需要import驅(qū)動(dòng)的API,這樣可使程序不依賴具體的驅(qū)動(dòng),使程序的靈活性更高。DriverManager.getConnection(url,user,password),根據(jù)url獲取數(shù)據(jù)庫(kù)的鏈接。5Tip:數(shù)據(jù)庫(kù)URL常用數(shù)據(jù)庫(kù)URL地址的寫法:Oracle—jdbc:oracle:thin:@localhost:1521:sidSqlServer—jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sidMySql—jdbc:mysql://localhost:3306/sidMysql的url地址的簡(jiǎn)寫形式:jdbc:mysql:///sid常用屬性:useUnicode=true&characterEncoding=UTF-8URL用于標(biāo)識(shí)數(shù)據(jù)庫(kù)的位置,程序員通過URL地址告訴JDBC程序連接哪個(gè)數(shù)據(jù)庫(kù),URL的寫法為:jdbc:mysql:[]//localhost:3306/test?參數(shù)名:參數(shù)值協(xié)議子協(xié)議主機(jī):端口數(shù)據(jù)庫(kù)6Tip:程序詳解—ConnectionJdbc程序中的Connection,它用于代表數(shù)據(jù)庫(kù)的鏈接,Collection是數(shù)據(jù)庫(kù)編程中最重要的一個(gè)對(duì)象,客戶端與數(shù)據(jù)庫(kù)所有交互都是通過connection對(duì)象完成的,這個(gè)對(duì)象的常用方法:createStatement():創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送sql的statement對(duì)象。prepareStatement(sql):創(chuàng)建向數(shù)據(jù)庫(kù)發(fā)送預(yù)編譯sql的PrepareSatement對(duì)象。prepareCall(sql):創(chuàng)建執(zhí)行存儲(chǔ)過程的callableStatement對(duì)象。setAutoCommit(boolean
autoCommit):設(shè)置事務(wù)是否自動(dòng)提交。commit():在鏈接上提交事務(wù)。rollback():在此鏈接上回滾事務(wù)。7Tip:程序詳解—StatementJdbc程序中的Statement對(duì)象用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,Statement對(duì)象常用方法:execute(Stringsql):用于向數(shù)據(jù)庫(kù)發(fā)送任意sql語(yǔ)句executeQuery(String
sql):只能向數(shù)據(jù)發(fā)送查詢語(yǔ)句。executeUpdate(String
sql):只能向數(shù)據(jù)庫(kù)發(fā)送insert、update或delete語(yǔ)句addBatch(String
sql):把多條sql語(yǔ)句放到一個(gè)批處理中。executeBatch():向數(shù)據(jù)庫(kù)發(fā)送一批sql語(yǔ)句執(zhí)行。
8Tip:程序詳解—ResultSetJdbc程序中的ResultSet用于代表Sql語(yǔ)句的執(zhí)行結(jié)果。Resultset封裝執(zhí)行結(jié)果時(shí),采用的類似于表格的方式。ResultSet對(duì)象維護(hù)了一個(gè)指向表格數(shù)據(jù)行的游標(biāo),初始的時(shí)候,游標(biāo)在第一行之前,調(diào)用ResultSet.next()方法,可以使游標(biāo)指向具體的數(shù)據(jù)行,進(jìn)行調(diào)用方法獲取該行的數(shù)據(jù)。ResultSet既然用于封裝執(zhí)行結(jié)果的,所以該對(duì)象提供的都是用于獲取數(shù)據(jù)的get方法:獲取任意類型的數(shù)據(jù)getObject(intindex)getObject(stringcolumnName)獲取指定類型的數(shù)據(jù),例如:getString(intindex)getString(StringcolumnName)提問:數(shù)據(jù)庫(kù)中列的類型是varchar,獲取該列的數(shù)據(jù)調(diào)用什么方法?Int類型呢?bigInt類型呢?Boolean類型?9Tip:常用數(shù)據(jù)類型轉(zhuǎn)換表Jdbc對(duì)應(yīng)方法返回類型getBoolean()BooleangetByte()BytegetShort()ShortgetInt()IntgetLong()LonggetString()StringgetClobgetBlob()ClobBlobgetDate()java.sql.DategetTime()java.sql.TimegetTimestamp()java.sql.TimestampSQL類型BITTINYINTSMALLINTIntBIGINTCHAR,VARCHAR,LONGVARCHARText(clob)BlobDATETIMETIMESTAMP10Tip:程序詳解—ResultSetResultSet還提供了對(duì)結(jié)果集進(jìn)行滾動(dòng)的方法:next():移動(dòng)到下一行Previous():移動(dòng)到前一行absolute(introw):移動(dòng)到指定行beforeFirst():移動(dòng)resultSet的最前面。afterLast():移動(dòng)到resultSet的最后面。11Tip:程序詳解—釋放資源Jdbc程序運(yùn)行完后,切記要釋放程序在運(yùn)行過程中,創(chuàng)建的那些與數(shù)據(jù)庫(kù)進(jìn)行交互的對(duì)象,這些對(duì)象通常是ResultSet,Statement和Connection對(duì)象。特別是Connection對(duì)象,它是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時(shí)、正確的關(guān)閉,極易導(dǎo)致系統(tǒng)宕機(jī)。Connection的使用原則是盡量晚創(chuàng)建,盡量早的釋放。為確保資源釋放代碼能運(yùn)行,資源釋放代碼也一定要放在finally語(yǔ)句中。12Tip:使用JDBC對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUDJdbc中的statement對(duì)象用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,想完成對(duì)數(shù)據(jù)庫(kù)的增刪改查,只需要通過這個(gè)對(duì)象向數(shù)據(jù)庫(kù)發(fā)送增刪改查語(yǔ)句即可。Statement對(duì)象的executeUpdate方法,用于向數(shù)據(jù)庫(kù)發(fā)送增、刪、改的sql語(yǔ)句,executeUpdate執(zhí)行完后,將會(huì)返回一個(gè)整數(shù)(即增刪改語(yǔ)句導(dǎo)致了數(shù)據(jù)庫(kù)幾行數(shù)據(jù)發(fā)生了變化)。Statement.executeQuery方法用于向數(shù)據(jù)庫(kù)發(fā)送查詢語(yǔ)句,executeQuery方法返回代表查詢結(jié)果的ResultSet對(duì)象。練習(xí):編寫程序?qū)ser表進(jìn)行增刪改查操作。練習(xí):編寫工具類簡(jiǎn)化CRUD操作。(異常暫不處理)13Tip:CRUD操作-create使用executeUpdate(Stringsql)方法完成數(shù)據(jù)添加操作,示例操作: Statementst=conn.createStatement(); Stringsql="insertintouser(….)values(…..)"; intnum=st.executeUpdate(sql); if(num>0){ System.out.println("插入成功?。?!"); }14Tip:CRUD操作-updata使用executeUpdate(Stringsql)方法完成數(shù)據(jù)修改操作,示例操作: Statementst=conn.createStatement(); Stringsql=“updateusersetname=‘’wherename=‘’"; intnum=st.executeUpdate(sql); if(num>0){ System.out.println(“修改成功?。?!"); }15Tip:CRUD操作-delete使用executeUpdate(Stringsql)方法完成數(shù)據(jù)刪除操作,示例操作: Statementst=conn.createStatement(); Stringsql=“deletefromuserwhereid=1; intnum=st.executeUpdate(sql); if(num>0){ System.out.println(“刪除成功?。?!"); }16Tip:CRUD操作-read使用executeQuery(Stringsql)方法完成數(shù)據(jù)查詢操作,示例操作: Statementst=conn.createStatement(); Stringsql=“select*fromuserwhereid=1; ResultSetrs=st.executeUpdate(sql); while(rs.next()){ //根據(jù)獲取列的數(shù)據(jù)類型,分別調(diào)用rs的相應(yīng)方法 //映射到j(luò)ava對(duì)象中 }17Tip:實(shí)例練習(xí)—用戶注冊(cè)和登陸改寫前面講解的用戶注冊(cè)和登陸案例,實(shí)現(xiàn)如下需求:1、把xml換成數(shù)據(jù)庫(kù),重寫UserDao。2、定義DAO接口,并定義Dao工廠,實(shí)現(xiàn)web層和dao層的解耦。3、自定義dao異常。4、防范sql注入攻擊SQL注入是用戶利用某些系統(tǒng)沒有對(duì)輸入數(shù)據(jù)進(jìn)行充分的檢查,從而進(jìn)行惡意破壞的行為。1、statement存在sql注入攻擊問題,例如登陸用戶名采用'or1=1orname=‘2、防范SQL注入,需要采用PreparedStatement取代Statement。18Tip:PreparedStatementPreperedStatement是Statement的孩子,它的實(shí)例對(duì)象可以通過調(diào)用Connection.preparedStatement()方法獲得,相對(duì)于Statement對(duì)象而言:PreperedStatement可以避免SQL注入的問題。Statement會(huì)使數(shù)據(jù)庫(kù)頻繁編譯SQL,可能造成數(shù)據(jù)庫(kù)緩沖區(qū)溢出。PreparedStatement可對(duì)SQL進(jìn)行預(yù)編譯,從而提高數(shù)據(jù)庫(kù)的執(zhí)行效率。并且PreperedStatement對(duì)于sql中的參數(shù),允許使用占位符的形式進(jìn)行替換,簡(jiǎn)化sql語(yǔ)句的編寫。練習(xí):使用PreparedStatement改寫UserDao19Tip:JDBC綜合練習(xí)-客戶管理字段名說明類型Id編號(hào)varchar(20)name客戶姓名varchar(20)sex性名varchar(4)birthday生日datecellphone手機(jī)varchar(20)Email電子郵件varchar(40)preference客戶愛好varchar(100)type客戶類型varchar(40)Description備注varchar(255)創(chuàng)立如下數(shù)據(jù)庫(kù)表customer,并完成web下的crud操作20Tip:數(shù)據(jù)庫(kù)分頁(yè)MySQL分頁(yè)的實(shí)現(xiàn):Select*fromtablelimitM,NM:記錄開始索引位置N:取多少條記
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人用車抵押權(quán)合同模板(2024年修訂)版
- 2025年集裝箱短型管項(xiàng)目可行性研究報(bào)告
- 二零二五年度產(chǎn)業(yè)園區(qū)綠化養(yǎng)護(hù)與生態(tài)修復(fù)服務(wù)合同樣本3篇
- 二零二四年度醫(yī)療健康大數(shù)據(jù)服務(wù)平臺(tái)共建協(xié)議
- 二零二五年度知識(shí)產(chǎn)權(quán)許可使用合同樣本6篇
- 二零二五年度徹磚勞務(wù)分包合同合同履行監(jiān)督與評(píng)價(jià)4篇
- 2025年度美容院線上線下融合運(yùn)營(yíng)合同4篇
- 2025年度家庭用車個(gè)人貸款購(gòu)車合同(含補(bǔ)貼政策)4篇
- 2025版排水工程材料供應(yīng)合同4篇
- 二零二五年度體育賽事臨時(shí)工雇傭合同范本2篇
- 紅色革命故事《王二小的故事》
- 《白蛇緣起》賞析
- 海洋工程用高性能建筑鋼材的研發(fā)
- 蘇教版2022-2023學(xué)年三年級(jí)數(shù)學(xué)下冊(cè)開學(xué)摸底考試卷(五)含答案與解析
- 英語(yǔ)48個(gè)國(guó)際音標(biāo)課件(單詞帶聲、附有聲國(guó)際音標(biāo)圖)
- GB/T 6892-2023一般工業(yè)用鋁及鋁合金擠壓型材
- 冷庫(kù)安全管理制度
- 2023同等學(xué)力申碩統(tǒng)考英語(yǔ)考試真題
- 家具安裝工培訓(xùn)教案優(yōu)質(zhì)資料
- 在雙減政策下小學(xué)音樂社團(tuán)活動(dòng)有效開展及策略 論文
- envi二次開發(fā)素材包-idl培訓(xùn)
評(píng)論
0/150
提交評(píng)論