

下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、北京傳智播客教|7 www.itcaGC傳智播客 一 k 級軟件人才實作培訓(xùn)專審!簡介JDBC (Java Data Base Connectivity Java數(shù)據(jù)庫連 接),由一些接口和類構(gòu)成的APIoJ2SE的一部分,iljava.sqljavax.sql包組成。北京傳智播客教|7 www.itcaGV_丿丿北京:傳智播客教I? C傳智播客 一7T級軟件人才實作培訓(xùn)專家!簡介應(yīng)用程序、JDBCAPK 數(shù)據(jù)庫驅(qū)動及數(shù)據(jù)庫 Z 間的關(guān)系北京傳智播客教|7 廠 傳智播客 一7T級軟件人才夾作培訓(xùn)專家!連接數(shù)據(jù)的步驟注冊驅(qū)動(只做一次)建立連接(Connection)創(chuàng)建執(zhí)行SQL的語句(Sta
2、tement)執(zhí)行語句處理執(zhí)行結(jié)果(ResultSet)釋放資源快速起步示例MySQL Dnver兇用!疔丿北京傳智播客教仃注冊驅(qū)動Class.forName(ucom.mysql.jdbc.Driver);推薦這種方式,不會對具體的驅(qū)動類產(chǎn)生依賴。DriverManager.registerDriver(com.mysql.jdbc. Driver);會造成DriverManager中產(chǎn)生兩個一樣的驅(qū)動,并會 對具體的驅(qū)動類產(chǎn)屋依賴。System.setProperty(jdbc.drivers, driverl:driver2,);雖然不會對具體的驅(qū)動類產(chǎn)生依賴;但注冊不太方便, 所以很少
3、使用。驅(qū)動類型(四種類型)北京:傳智播客教|7 C傳智播客 一7T級軟件人才實作培訓(xùn)專家!www. itcast.c n建立連接(C oniiectioii)Connection conn = DriverManager.getCormection(url,user, password);url格式:JDBC:子協(xié)議:子名稱主機(jī)名:端口/數(shù)據(jù)庫名? 屆忡夕;=丿曲祚值&User,password可以用“屬性名=屬性值”方式 告訴藪據(jù)庫;廠傳丿北京:傳智播客教I? 其 他 參 數(shù) 如 :useUnicode=true&characterEncoding=GBK。C傳智播客 一 k
4、 級軟件人才賣作培訓(xùn)專家!、倉U建執(zhí)行SQL的語句(Statement)StatementStatement st = conn.createStatement();st.executeQuery(sql);PreparedStatementString sql = “select * from table_name where col name=?n;PreparedStatement ps = conn.preparedStatement(sql);ps.setStri ng(1col_valuej;ps.executeQuery();北京傳智播客教仃C傳智播客 一 k 級軟件人才賣作培訓(xùn)
5、專家!、處理執(zhí)行結(jié)果(ResultSet)ResultSet rs = statement.executeQuery(sql);While(rs.next()rs.getString(ucol_namen);rs.getlnt(ucol_namen);II.北京傳智播客教仃廠 傳智播客 一7T級軟件人才實作培訓(xùn)專家!、釋放資源釋放ResultSet, Statement,Connection.數(shù)據(jù)庫連接(Connection)是非常稀有的資源,用完 后必須馬上釋放,如果Connection不能及時正確的關(guān) 閉將導(dǎo)致系統(tǒng)宕機(jī)。Connection的使用原則是盡量晚 創(chuàng)建,盡量早的釋放。V_丿北京
6、傳智播客教仃基本的CRUD(創(chuàng)建、讀取、更新、刪除)模板代碼Connection conn = null;Statement st=null;ResultSet rs = null;try 獲得Connection創(chuàng)睡Statement廠傳北京傳智播客教仃處理查詢結(jié)果ResultSet finally 釋放資源ResultSet, Statement,Connection北京傳智播客教仃創(chuàng)建增加對應(yīng)SQL的INSERT,返回增加成功的行(記錄) 數(shù)conn = getC onn ection();Statement st = conn.createStatement();String sql二
7、“insert into user(name, age,regist_date )” +Uvalues(*name, 10, now()M;int i = st.executeUpdate(sql);i為插入的記錄數(shù)北京傳智播客教仃廠 傳智播客 一級軟件人才實作培訓(xùn)專家!讀取讀取(查詢)対應(yīng) SQL 的 SELECT,返回查詢結(jié)果conn = getC onn ecti on();st = conn .createStatement();String sql = select id, name, age,regist_date from user11;rs = st.executeQuery(
8、sql);while (rs.next() System.out.pnt(rs.getlnt(id,) + tt);System.out.print(rs.getString(name) + tt);System.out.pnnt(rs.getlnt(Hage) +Htt);System.out.print(rs.getTimestamp(,regist_date,) + ” tt ”);System.out.println();廠傳北京傳智播客教仃丿北京傳智播客教I? 廠 傳智播客 一 k 級軟件人才夾作培訓(xùn)專家!更新更新(修改)對應(yīng) SQL 的 UPDATE,返冋被修改的行(記錄)數(shù)con
9、n = getConn ection();Statement st = conn.createStatement();String sql=uupdate person set name=new nametn;int i = st.executeUpdate(sql);i為符合條件的記錄數(shù)V_丿北京傳智播客教仃刪除刪除對應(yīng)SQL的DELETE,返回被刪除的行(記錄)數(shù)conn = getConn ection();Statement st = conn.createStatement();String sql-*delete from user where id=1n;int i = st.e
10、xecuteUpdate(sql);i為刪掉的記錄數(shù)廠傳髙丿北京傳智播客教仃C傳智播客 一7T級軟件人才實作培訓(xùn)專家!CRUD總結(jié)增、刪、改IJStatement.executeUpdate完成,返 回整數(shù)(匹配的記錄數(shù)),這類操作相對簡單。查詢JIJStatement.executeQuery:完成,返回的是ResultSet對彖,ResultSet中包含了查詢的結(jié)杲;查 詢相對與增、冊ij、改要復(fù)雜一些,因為有查詢結(jié)果耍 處理。北京傳智播客教I? C傳智播客 一7T級軟件人才實作培訓(xùn)專家!SQL注入9PreparedS tatemen t和Statement在 SQL 中包含特殊字符或 S
11、QL 的關(guān)鍵字(如:orloL)時Statement 將出現(xiàn)不可預(yù)料的結(jié)果(出現(xiàn)異常或查詢的結(jié)果 不正確),町用 PreparedStatement 來解決。 PreperedStatement (從 Statement 擴(kuò)展而來)相對 Statement 的優(yōu)點:1.沒有 SQL 注入的問題。2Statement 會使數(shù)據(jù)斥頻繁編譯 SQL,町能造成數(shù)據(jù)庫緩 沖區(qū)溢出。3數(shù)據(jù)庫和驅(qū)動可以對 PreperedStatement 進(jìn)彳亍優(yōu)化(只有 在相關(guān)聯(lián)的數(shù)據(jù)庫連接沒有關(guān)閉的情況下有效)。丿北京傳智播客教I? 廠 傳智播客 一 k 級軟件人才賣作培訓(xùn)專家!數(shù)據(jù)類型詳細(xì)信息見java.sql.T
12、ypes幾種特殊且比較常用的類型1 .DATA,TIME,TIMESTAMPS date,time,datetime/;ps.octDatc(i,d); ps.GCtTimc(i,t);ps.GCtTimcGtamp(i, to);I儀:rs.getDate(i); rs.getTime(i); rs.getTimestamp(i);2. CLOB T text存:ps.setCharacterStream(index, reader, length); ps.setString(i, s);取:reader = rs. getCharacterStream(i);reader = rs.ge
13、tClob(i).getCharacterStream(); string = rs.getStri ng(i);3. BLOB T blob存:ps.setBinaryStream(i, inputstream, length);?。簉s.getBinaryStream(i);rs.getBlob(i).getBinaryStream();北京傳智播客教仃一個簡單用戶相關(guān)的數(shù)據(jù)訪問層 J2EE三層架構(gòu)簡介表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,三層之間用 接口隔離。定義domain對彖User,定義存取用戶的接口用JDBC實現(xiàn)接口用配置文件(properties)和反射實現(xiàn)與具體類的耦合廠傳北京傳智
14、播客教仃C傳智播客一高級軟件人才賣作培訓(xùn)專家事務(wù)(ACID)原子性(atomicity):組成事務(wù)處理的語句形成了一個邏輯單 元,不能只執(zhí)行其中的一部分。致性(consistency):在事務(wù)處理執(zhí)行前后,數(shù)據(jù)庫是一 致的(數(shù)據(jù)庫數(shù)據(jù)完整性約束)。隔離性(isolation):個事務(wù)處理對另一個事務(wù)處理的影 響。持續(xù)性(durability):事務(wù)處理的效果能夠被永久保存下來。connection.setAutoCommit(false);/ 打開事務(wù)。conn ectio mit(); 提交事務(wù)。 connection.rollback();/|nl 滾爭務(wù)。北京傳智播客教仃廠 傳智播客 一
15、高級軟件人才賣作培訓(xùn)專家!、當(dāng)只想撤銷事務(wù)中的部分操作時可便用 SavePointSavePoint sp = connectiorisetSavepoint();conn ectio n.rollerbak(sp);connectioricommit();C傳智播客 一 k 級軟件人才夾作培訓(xùn)專家!、事務(wù)(JTA)跨越多個數(shù)據(jù)源的事務(wù),使用 JTA 容器實現(xiàn)事務(wù)。分成兩階段提交。 Javax.transactlon.UserTransacilon lx =丿北京傳智播客教仃(UserTra nsaction)ctx .Iookupfj ndiName);tx.begin();/connect
16、ion 1 connection2(可能來口不同的數(shù)據(jù)庫)mit();/tx.rollback();V_丿北京傳智播客教療C傳智播客 一 k 級軟件人才夾作培訓(xùn)專家!、隔離級別多線程并發(fā)讀取數(shù)據(jù)時的止確性conn ection.setTransactionlsolation(C onn ection.TRANSACTION_READ_COMMITTED);V:可能出現(xiàn),X:不會出現(xiàn)隔離級別臟讀不可重復(fù)讀幻讀讀未捉交(Read uncommitted)VVV讀已提交(Read committed)XVV可重復(fù)讀(Repeatable read)XXV可串行化(Serializable )XXXC
17、傳智播客 一高級軟件人才夾作培訓(xùn)專家!存儲過程北京傳智播客教仃存儲過程CallableStatement(從PreperedStatement擴(kuò)展來)cs =connection.prepareCall(ucall psname(?,?,?)n);cs.registerOutParameter(index, TypesNTEGER); cs.setXXX(i,xxxx);cs.executeUpdate();int id=cs.getlnt(index);北京傳智播客教I? C傳智播客 一 k 級軟件人才夾作培訓(xùn)專家!其他的幾個API PreparedStatement.getGe nerat
18、edKeys() PreparedStatement ps =connection.prepar9Statement(sql,StatementRETURN_ GENERATED _KEYS);ps.executeUpdate();ResultSet rs = st.getGeneratedKeys();rs.getlnt(1);批處理,町以大幅度提升大量增、刪、改的速度。PreparedStatement.addBatch();PreparedStatement.executeBatch();丿北京傳智播客教|7 C傳智播客 一髙級軟件人才夾作培訓(xùn)專家!其他的幾個API町滾動的結(jié)果集Stat
19、ement st =connection.createStatement(ResultSet.TYPE SCROLL SENSITIVE,ResultSet.CONCUR_UPDATABLE);ResultSet rs = st.executeQuery(sql);rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rsJsLast();rs.absolute(9);rs.moveTolnsertRow();可更新的結(jié)果集conn.createStatement(ResultSet.TYPE_SCROLL SEN
20、SITIVE,ResultSeLCONCURUPDATABLE);rs.updateString(Hcol namew,Mnew value*);rs.updateRow();北京傳智播客教|7 C傳智播客 一髙級軟件人才夾作培訓(xùn)專家!DatabaseMetaDatafllParameterlVletaDataDatabaseMetaData meta =connectio n.getMetaData();通過DatabaseMetaData可以獲得數(shù)據(jù)庫相關(guān)的信息如:數(shù)拯庫版本、數(shù)拯庫名、數(shù)據(jù)庫廠商信息、是否 支坪事務(wù)、是否支持某種事務(wù)隔離級別,是否支持滾 動緒果集等。ParameterMe
21、taData pmd =preparedStatement.getParameterMetaData();通過ParameterMetaDatanf以獲得參數(shù)信息。北空傳智播客教仃C傳智播客 一髙級軟件人才賣作培訓(xùn)專家!、ResultSetMetaDataResultSetMetaData meta = rs.getMetaData();通過 ResultSetMetaData 町以獲得結(jié)果冇兒列、各列名、各列別 名.各列類型等。町以將 ResultSet 放入 Map(key:列名 value:列值)。用反射 ResultSetMetaData 將查詢結(jié)果讀入對彖中(簡單的 O/RMappi
22、ng)1)讓 SQL 語句中列別名和要讀入的對象屬性名一樣;2)通過 ResultSetMetaData 獲得結(jié)果列數(shù)和列別名;3)通過反射將對彖的所有 setXxx 方法找到;4)將 3) 找到的方法 setXxx 和 2) 找到的列別名進(jìn)行匹配 (即方法 中的 xxx 于列別名和等):5)由上一步找到的方法和列別名對應(yīng)關(guān)系進(jìn)行賦值 Methodinvoke(obj, rs.getObject(columnAliasName);0)return this.connPool.removeFirst(O); returncreateConnection();private Connection
23、createConnection()Connection realConn = DriverManager.getConnection();Connection myConn = newMyConnection(realConn,this.connPool);return myConn;-nrTT.-丿北京傳智播客教仃常用的開源實現(xiàn)DBCP使用DBCP必須用的三個包:commons-dbcp-1.2.1 .jar,commons-pool-1.2.jar, commons-collections-3.1 .jar配置參數(shù)。JavaAPI:BasicDataSourceFactory.creat
24、eDataSource( properties);北京傳智播客教仃C傳智播客一髙級軟件人才賣作培訓(xùn)專家!、使用繼承優(yōu)化JDB C代碼(模板模式)優(yōu)化查詢操作,區(qū)分開變化和不變的部分:sql和ResultSet的處理是變化部分,創(chuàng)建和釋放資源部分是不變部分。 提取超類,將不變部分放入超類,變化部分留給子類實現(xiàn)。超類的主要代碼:public Object find(String sql, Object args)(rs = ps.executeQuery();if (rs.next() return rowMapper(rs);protected abstract Object rowMapper
25、(Resu tSet rs);傳智播客髙級軟件人才實作培訓(xùn)專家!、丿北京傳智播客教|7 C傳智播客 一髙級軟件人才賣作培訓(xùn)專家!、使用組合優(yōu)化JDB C代碼(策略模式)優(yōu)化查詢操作,區(qū)分開變化和不變的部分:sql利ResultSet的處理是變化部分,創(chuàng)建和釋放資源部分是不變部分。提取接廠I封裝變化部分。 JDBC操作主要代碼:public Object find(String sql, Object args, RowMapper rowMapper) rs = ps.executeQuery();if (rs.next()return rowMapper.mapRow(rs);冋調(diào)接M:pu
26、blic interface RowMapper public Object mapRow(ResultSet rs) throws SQLException;-北京傳智播客教|7 C傳智播客 一髙級軟件人才賣作培訓(xùn)專家!、Spring iKlJdbcTemplate丿北京:傳智播客教廠 傳智播客 一7T級軟件人才賣作培訓(xùn)專家!Spring 的 JdbcTevnplate 更新public int update(String sql, Object args)。插入數(shù)據(jù)并獲得結(jié)果:public Object execute(ConnectionCallback action)其他方法簡介V_丿
27、北京:傳智播客教廠 傳智播客 一7T級軟件人才賣作培訓(xùn)專家!SpringIT9NamedParameterJdbcTemplateig sql, SqIParameterSourcePPer)丿北京傳智播客教|7 C傳智播客 一 k 級軟件人才實作培訓(xùn)專家!Spring 的 Simple JdbcTemplateSimpleJdbcT emplate內(nèi)部包禽了 個N amedParameterJdbcTemplate;所以NamedParameterJdbcTemplate能做的爭怙SimpleJdbcTemplate能I , SimpleJdbcTemplate相對J NamedParame
28、terJdbcTemplate主要増加f JDK5.0的 和可變長度參數(shù)支持。public List query(String sql, Paiameteriz9dRowMapper rm, Object. args)public T queryForObject(String sql, ParameterizedRowMapper rm,SqIParameterSource args)public List query(String sql, ParameterizedRowMapper rm,SqIParameterSource args)getJdbcOperations返冋的是JdbcOperations(實現(xiàn)JdbcTemplate)aetNamed ParameterJdbcOperations返回的是NamedParameterJdbcOperations(實現(xiàn)是NamedParameterJdbcTemplate)北京傳智播客教I? 實現(xiàn) UserDao 接口實現(xiàn)UserDao接口修改perties文件,切換U serDao的 實現(xiàn)。測試UserDao的新的實現(xiàn)類。伶詢帶有參數(shù),和行映射方法:
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新解讀《CB-T 429 - 1999單爪錨》新解讀
- 化學(xué)●海南卷丨2022年海南省普通高中學(xué)業(yè)水平選擇性考試高考化學(xué)真題試卷及答案
- 路基人字行骨架防護(hù)施工方案
- 基坑開挖工藝流程
- 北師大版(2019) 必修第三冊 Unit 9 Learning Lesson 2 Language Learning Tips課件(內(nèi)嵌音頻)
- 基于雙球模型改進(jìn)的眼動追蹤算法研究
- 浙江省麗水市2022-2023學(xué)年高二下學(xué)期普通高中期末教學(xué)質(zhì)量檢測化學(xué)試題(含答案)
- 汽車傳感器與檢測技術(shù)電子教案:地磁方位傳感器
- 物理中考一輪復(fù)習(xí)教案 第三講 熔化和凝固、升華和凝華、水循環(huán)
- 倉庫擴(kuò)容打折活動方案
- 患者跌倒的預(yù)防及管理課件
- 高院民一庭負(fù)責(zé)人答記者問:最高院《關(guān)于審理城鎮(zhèn)房屋租賃合同糾紛案件具體應(yīng)用法律若干問題的解釋》
- 體檢報告單入職體檢模板
- 工作計劃及進(jìn)度表
- 鋪麻醉床技術(shù)操作評分標(biāo)準(zhǔn)
- 管道焊接及焊縫外觀檢查記錄表
- 回油管夾片的沖壓工藝與模具設(shè)計
- 個體化健康教育
- 《白內(nèi)障》ppt課件
- Resume(簡歷英文版)
- 報價單模板(中英文
評論
0/150
提交評論