版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、北京傳智播客教育 JDBC開(kāi)發(fā)王昭珽北京傳智播客教育 Tip:JDBC簡(jiǎn)介數(shù)據(jù)庫(kù)驅(qū)動(dòng)SUN公司為了簡(jiǎn)化、統(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)用程序JDBC北京傳智播客教育 Tip:JDBC簡(jiǎn)介JDBC全稱為:Java Data Base Connectivity(java數(shù)據(jù)庫(kù)連接),它主要由接口組成。組成JDBC的個(gè)包:java.sqljavax.sql開(kāi)發(fā)JDBC應(yīng)用需要以上2個(gè)包的支持外,還需要導(dǎo)入相應(yīng)JDBC的數(shù)據(jù)庫(kù)實(shí)現(xiàn)(即數(shù)據(jù)庫(kù)驅(qū)動(dòng))。
2、北京傳智播客教育 Tip:第一個(gè)JDBC程序編寫(xiě)一個(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)。二、編寫(xiě)程序,在程序中加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)DriverManager. registerDriver(Driverdriver) 三、建立連接(Connection)Connection conn = DriverManager.getConnection(url,user,pass); 四、創(chuàng)建用于向數(shù)據(jù)庫(kù)發(fā)送SQL的Statement對(duì)象,并發(fā)送sqlStatem
3、ent st = conn.createStatement();ResultSet rs = st.excuteQuery(sql);五、從代表結(jié)果集的ResultSet中取出數(shù)據(jù),打印到命令行窗口六、斷開(kāi)與數(shù)據(jù)庫(kù)的連接,并釋放相關(guān)資源北京傳智播客教育 Tip:程序詳解DriverManagerJdbc程序中的DriverManager用于加載驅(qū)動(dòng),并創(chuàng)建與數(shù)據(jù)庫(kù)的鏈接,這個(gè)API的常用方法:DriverManager.registerDriver(new Driver()DriverManager.getConnection(url, user, password),注意:在實(shí)際開(kāi)發(fā)中并不推
4、薦采用registerDriver方法注冊(cè)驅(qū)動(dòng)。原因有二:一、查看Driver的源代碼可以看到,如果采用此種方式,會(huì)導(dǎo)致驅(qū)動(dòng)程序注冊(cè)兩次,也就是在內(nèi)存中會(huì)有兩個(gè)Driver對(duì)象。二、程序依賴mysql的api,脫離mysql的jar包,程序?qū)o(wú)法編譯,將來(lái)程序切換底層數(shù)據(jù)庫(kù)將會(huì)非常麻煩。推薦方式:Class.forName(“com.mysql.jdbc.Driver”);采用此種方式不會(huì)導(dǎo)致驅(qū)動(dòng)對(duì)象在內(nèi)存中重復(fù)出現(xiàn),并且采用此種方式,程序僅僅只需要一個(gè)字符串,不需要依賴具體的驅(qū)動(dòng),使程序的靈活性更高。同樣,在開(kāi)發(fā)中也不建議采用具體的驅(qū)動(dòng)類型指向getConnection方法返回的connec
5、tion對(duì)象。北京傳智播客教育 Tip:數(shù)據(jù)庫(kù)URL常用數(shù)據(jù)庫(kù)URL地址的寫(xiě)法:Oracle寫(xiě)法:jdbc:oracle:thin:localhost:1521:sidSqlServerjdbc:microsoft:sqlserver:/localhost:1433; DatabaseName=sidMySqljdbc:mysql:/localhost:3306/sidMysql的url地址的簡(jiǎn)寫(xiě)形式: jdbc:mysql:/sid常用屬性:useUnicode=true&characterEncoding=UTF-8URL用于標(biāo)識(shí)數(shù)據(jù)庫(kù)的位置,程序員通過(guò)URL地址告訴JDBC程序連接哪個(gè)數(shù)
6、據(jù)庫(kù),URL的寫(xiě)法為: jdbc:mysql:/localhost:3306/test ?參數(shù)名:參數(shù)值協(xié)議子協(xié)議主機(jī):端口數(shù)據(jù)庫(kù)北京傳智播客教育 Tip:程序詳解ConnectionJdbc程序中的Connection,它用于代表數(shù)據(jù)庫(kù)的鏈接,Collection是數(shù)據(jù)庫(kù)編程中最重要的一個(gè)對(duì)象,客戶端與數(shù)據(jù)庫(kù)所有交互都是通過(guò)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(
7、sql):創(chuàng)建執(zhí)行存儲(chǔ)過(guò)程的callableStatement對(duì)象。 mit(boolean mit):設(shè)置事務(wù)是否自動(dòng)提交。 commit() :在鏈接上提交事務(wù)。rollback() :在此鏈接上回滾事務(wù)。北京傳智播客教育 Tip:程序詳解StatementJdbc程序中的Statement對(duì)象用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句, Statement對(duì)象常用方法:executeQuery(Stringsql) :用于向數(shù)據(jù)發(fā)送查詢語(yǔ)句。executeUpdate(Stringsql):用于向數(shù)據(jù)庫(kù)發(fā)送insert、update或delete語(yǔ)句execute(String sql):用于向數(shù)據(jù)庫(kù)發(fā)
8、送任意sql語(yǔ)句addBatch(Stringsql) :把多條sql語(yǔ)句放到一個(gè)批處理中。executeBatch():向數(shù)據(jù)庫(kù)發(fā)送一批sql語(yǔ)句執(zhí)行。 北京傳智播客教育 Tip:程序詳解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方
9、法:獲取任意類型的數(shù)據(jù)getObject(int index)getObject(string columnName)獲取指定類型的數(shù)據(jù),(封裝數(shù)據(jù)時(shí)方便)例如:getString(int index)getString(String columnName)提問(wèn):數(shù)據(jù)庫(kù)中列的類型是varchar,獲取該列的數(shù)據(jù)調(diào)用什么方法?Int類型呢?bigInt類型呢?Boolean類型?北京傳智播客教育 Tip:常用數(shù)據(jù)類型轉(zhuǎn)換表Jdbc對(duì)應(yīng)方法返回類型getBoolean getBytes()Boolean bytegetByte()BytegetShort()ShortgetInt()IntgetL
10、ong()LonggetString()StringgetClob getBlob()Clob BlobgetDate()java.sql.DategetTime()java.sql.TimegetTimestamp()java.sql.TimestampSQL類型BIT(1) bit(n)TINYINTSMALLINT IntBIGINTCHAR,VARCHAR,LONGVARCHARText(clob) BlobDATETIMETIMESTAMP北京傳智播客教育 Tip:程序詳解ResultSetResultSet還提供了對(duì)結(jié)果集進(jìn)行滾動(dòng)的方法:next():移動(dòng)到下一行Previous(
11、):移動(dòng)到前一行absolute(int row):移動(dòng)到指定行beforeFirst():移動(dòng)resultSet的最前面。afterLast() :移動(dòng)到resultSet的最后面。練習(xí)一把北京傳智播客教育 Tip:程序詳解釋放資源Jdbc程序運(yùn)行完后,切記要釋放程序在運(yùn)行過(guò)程中,創(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)建,盡量早的釋放。為確保
12、資源釋放代碼能運(yùn)行,資源釋放代碼也一定要放在finally語(yǔ)句中。北京傳智播客教育 Tip:使用JDBC對(duì)數(shù)據(jù)庫(kù)進(jìn)行CRUDJdbc中的statement對(duì)象用于向數(shù)據(jù)庫(kù)發(fā)送SQL語(yǔ)句,想完成對(duì)數(shù)據(jù)庫(kù)的增刪改查,只需要通過(guò)這個(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ì)象。
13、練習(xí):編寫(xiě)程序?qū)ser表進(jìn)行增刪改查操作。練習(xí):編寫(xiě)工具類簡(jiǎn)化CRUD操作(配置文件讀取配置信息)。(異常暫不處理)北京傳智播客教育 Tip:CRUD操作-create使用executeUpdate(String sql)方法完成數(shù)據(jù)添加操作,示例操作:Statement st = conn.createStatement();String sql = insert into user(.) values(.) ; int num = st.executeUpdate(sql);if(num0)System.out.println(插入成功!);北京傳智播客教育 Tip:CRUD操作-upd
14、ata使用executeUpdate(String sql)方法完成數(shù)據(jù)修改操作,示例操作:Statement st = conn.createStatement();String sql = “update user set name= where name=; int num = st.executeUpdate(sql);if(num0)System.out.println(“修改成功!);北京傳智播客教育 Tip:CRUD操作-delete使用executeUpdate(String sql)方法完成數(shù)據(jù)刪除操作,示例操作:Statement st = conn.createState
15、ment();String sql = “delete from user where id=1; int num = st.executeUpdate(sql);if(num0)System.out.println(“刪除成功!);北京傳智播客教育 Tip:CRUD操作-read使用executeQuery(String sql)方法完成數(shù)據(jù)查詢操作,示例操作:Statement st = conn.createStatement();String sql = “select * from user where id=1; ResultSet rs = st.executeUpdate(sq
16、l);while(rs.next()/根據(jù)獲取列的數(shù)據(jù)類型,分別調(diào)用rs的相應(yīng)方法/映射到j(luò)ava對(duì)象中北京傳智播客教育 Tip:實(shí)例練習(xí)用戶注冊(cè)和登陸改寫(xiě)前面講解的用戶注冊(cè)和登陸案例,實(shí)現(xiàn)如下需求:1、把xml換成數(shù)據(jù)庫(kù),重寫(xiě)UserDao。2、定義DAO接口,并定義Dao工廠,實(shí)現(xiàn)service層和dao層的解耦。3、自定義dao異常。4、防范sql注入攻擊SQL 注入是用戶利用某些系統(tǒng)沒(méi)有對(duì)輸入數(shù)據(jù)進(jìn)行充分的檢查,從而進(jìn)行惡意破壞的行為。1、statement存在sql注入攻擊問(wèn)題,例如登陸用戶名采用 or 1=1 or name=2、對(duì)于防范 SQL 注入,可以采用PreparedSt
17、atement取代Statement。北京傳智播客教育 Tip:PreparedStatementPreperedStatement是Statement的孩子,它的實(shí)例對(duì)象可以通過(guò)調(diào)用Connection.preparedStatement()方法獲得,相對(duì)于Statement對(duì)象而言:PreperedStatement可以避免SQL注入的問(wèn)題。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
18、語(yǔ)句的編寫(xiě)。練習(xí):使用PreparedStatement改寫(xiě)UserDao 北京傳智播客教育 Tip:JDBC綜合練習(xí)-客戶管理系統(tǒng)字段名說(shuō)明類型Id編號(hào)varchar(40)name客戶姓名varchar(20)gender性名varchar(4)birthday生日datecellphone手機(jī)varchar(20)Email電子郵件varchar(40)preference客戶愛(ài)好varchar(100)type客戶類型varchar(40)Description備注varchar(255)創(chuàng)立如下數(shù)據(jù)庫(kù)表customer,并完成web下的crud操作北京傳智播客教育 Tip: 數(shù)據(jù)庫(kù)分頁(yè)MySQL分頁(yè)的實(shí)現(xiàn):Selec
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 檸檬酸微生物菌種工崗前安全宣貫考核試卷含答案
- 圖案打樣工安全素養(yǎng)強(qiáng)化考核試卷含答案
- 松香工崗前面試考核試卷含答案
- 重冶萃取工誠(chéng)信道德測(cè)試考核試卷含答案
- 腈綸回收操作工崗前決策判斷考核試卷含答案
- 氣體分餾裝置操作工崗前規(guī)章考核試卷含答案
- 2024年漢江師范學(xué)院輔導(dǎo)員考試參考題庫(kù)附答案
- 電梯裝配調(diào)試工班組管理測(cè)試考核試卷含答案
- 2024年西昌學(xué)院輔導(dǎo)員考試參考題庫(kù)附答案
- 2024年蚌埠城市軌道交通職業(yè)學(xué)院輔導(dǎo)員考試參考題庫(kù)附答案
- 錫圓電子科技有限公司高端半導(dǎo)體封測(cè)項(xiàng)目環(huán)評(píng)資料環(huán)境影響
- GB/T 45356-2025無(wú)壓埋地排污、排水用聚丙烯(PP)管道系統(tǒng)
- 2025既有建筑改造利用消防設(shè)計(jì)審查指南
- 籃球場(chǎng)工程施工設(shè)計(jì)方案
- (市質(zhì)檢二檢)福州市2024-2025學(xué)年高三年級(jí)第二次質(zhì)量檢測(cè) 歷史試卷(含答案)
- 《外科手術(shù)學(xué)基礎(chǔ)》課件
- 化學(xué)-湖南省永州市2024-2025學(xué)年高二上學(xué)期1月期末試題和答案
- 2025年貴安發(fā)展集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- DB33T 1214-2020 建筑裝飾裝修工程施工質(zhì)量驗(yàn)收檢查用表標(biāo)準(zhǔn)
- 高考語(yǔ)文復(fù)習(xí)【知識(shí)精研】鑒賞古代詩(shī)歌抒情方式 課件
- 春運(yùn)志愿者培訓(xùn)
評(píng)論
0/150
提交評(píng)論