

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、北京傳智播客教|7 www.itcaGC傳智播客 一 k 級(jí)軟件人才實(shí)作培訓(xùn)專審!簡介JDBC (Java Data Base Connectivity Java數(shù)據(jù)庫連 接),由一些接口和類構(gòu)成的APIoJ2SE的一部分,iljava.sqljavax.sql包組成。北京傳智播客教|7 www.itcaGV_丿丿北京:傳智播客教I? C傳智播客 一7T級(jí)軟件人才實(shí)作培訓(xùn)專家!簡介應(yīng)用程序、JDBCAPK 數(shù)據(jù)庫驅(qū)動(dòng)及數(shù)據(jù)庫 Z 間的關(guān)系北京傳智播客教|7 廠 傳智播客 一7T級(jí)軟件人才夾作培訓(xùn)專家!連接數(shù)據(jù)的步驟注冊(cè)驅(qū)動(dòng)(只做一次)建立連接(Connection)創(chuàng)建執(zhí)行SQL的語句(Sta
2、tement)執(zhí)行語句處理執(zhí)行結(jié)果(ResultSet)釋放資源快速起步示例MySQL Dnver兇用!疔丿北京傳智播客教仃注冊(cè)驅(qū)動(dòng)Class.forName(ucom.mysql.jdbc.Driver);推薦這種方式,不會(huì)對(duì)具體的驅(qū)動(dòng)類產(chǎn)生依賴。DriverManager.registerDriver(com.mysql.jdbc. Driver);會(huì)造成DriverManager中產(chǎn)生兩個(gè)一樣的驅(qū)動(dòng),并會(huì) 對(duì)具體的驅(qū)動(dòng)類產(chǎn)屋依賴。System.setProperty(jdbc.drivers, driverl:driver2,);雖然不會(huì)對(duì)具體的驅(qū)動(dòng)類產(chǎn)生依賴;但注冊(cè)不太方便, 所以很少
3、使用。驅(qū)動(dòng)類型(四種類型)北京:傳智播客教|7 C傳智播客 一7T級(jí)軟件人才實(shí)作培訓(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、 級(jí)軟件人才賣作培訓(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 級(jí)軟件人才賣作培訓(xùn)
5、專家!、處理執(zhí)行結(jié)果(ResultSet)ResultSet rs = statement.executeQuery(sql);While(rs.next()rs.getString(ucol_namen);rs.getlnt(ucol_namen);II.北京傳智播客教仃廠 傳智播客 一7T級(jí)軟件人才實(shí)作培訓(xùn)專家!、釋放資源釋放ResultSet, Statement,Connection.數(shù)據(jù)庫連接(Connection)是非常稀有的資源,用完 后必須馬上釋放,如果Connection不能及時(shí)正確的關(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)建增加對(duì)應(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ù)北京傳智播客教仃廠 傳智播客 一級(jí)軟件人才實(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 級(jí)軟件人才夾作培訓(xùn)專家!更新更新(修改)對(duì)應(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_丿北京傳智播客教仃刪除刪除對(duì)應(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級(jí)軟件人才實(shí)作培訓(xùn)專家!CRUD總結(jié)增、刪、改IJStatement.executeUpdate完成,返 回整數(shù)(匹配的記錄數(shù)),這類操作相對(duì)簡單。查詢JIJStatement.executeQuery:完成,返回的是ResultSet對(duì)彖,ResultSet中包含了查詢的結(jié)杲;查 詢相對(duì)與增、冊(cè)ij、改要復(fù)雜一些,因?yàn)橛胁樵兘Y(jié)果耍 處理。北京傳智播客教I? C傳智播客 一7T級(jí)軟件人才實(shí)作培訓(xùn)專家!SQL注入9PreparedS tatemen t和Statement在 SQL 中包含特殊字符或 S
11、QL 的關(guān)鍵字(如:orloL)時(shí)Statement 將出現(xiàn)不可預(yù)料的結(jié)果(出現(xiàn)異?;虿樵兊慕Y(jié)果 不正確),町用 PreparedStatement 來解決。 PreperedStatement (從 Statement 擴(kuò)展而來)相對(duì) Statement 的優(yōu)點(diǎn):1.沒有 SQL 注入的問題。2Statement 會(huì)使數(shù)據(jù)斥頻繁編譯 SQL,町能造成數(shù)據(jù)庫緩 沖區(qū)溢出。3數(shù)據(jù)庫和驅(qū)動(dòng)可以對(duì) PreperedStatement 進(jìn)彳亍優(yōu)化(只有 在相關(guān)聯(lián)的數(shù)據(jù)庫連接沒有關(guān)閉的情況下有效)。丿北京傳智播客教I? 廠 傳智播客 一 k 級(jí)軟件人才賣作培訓(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);?。簉eader = 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();北京傳智播客教仃一個(gè)簡單用戶相關(guān)的數(shù)據(jù)訪問層 J2EE三層架構(gòu)簡介表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,三層之間用 接口隔離。定義domain對(duì)彖User,定義存取用戶的接口用JDBC實(shí)現(xiàn)接口用配置文件(properties)和反射實(shí)現(xiàn)與具體類的耦合廠傳北京傳智
14、播客教仃C傳智播客一高級(jí)軟件人才賣作培訓(xùn)專家事務(wù)(ACID)原子性(atomicity):組成事務(wù)處理的語句形成了一個(gè)邏輯單 元,不能只執(zhí)行其中的一部分。致性(consistency):在事務(wù)處理執(zhí)行前后,數(shù)據(jù)庫是一 致的(數(shù)據(jù)庫數(shù)據(jù)完整性約束)。隔離性(isolation):個(gè)事務(wù)處理對(duì)另一個(gè)事務(wù)處理的影 響。持續(xù)性(durability):事務(wù)處理的效果能夠被永久保存下來。connection.setAutoCommit(false);/ 打開事務(wù)。conn ectio mit(); 提交事務(wù)。 connection.rollback();/|nl 滾爭務(wù)。北京傳智播客教仃廠 傳智播客 一
15、高級(jí)軟件人才賣作培訓(xùn)專家!、當(dāng)只想撤銷事務(wù)中的部分操作時(shí)可便用 SavePointSavePoint sp = connectiorisetSavepoint();conn ectio n.rollerbak(sp);connectioricommit();C傳智播客 一 k 級(jí)軟件人才夾作培訓(xùn)專家!、事務(wù)(JTA)跨越多個(gè)數(shù)據(jù)源的事務(wù),使用 JTA 容器實(shí)現(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 級(jí)軟件人才夾作培訓(xùn)專家!、隔離級(jí)別多線程并發(fā)讀取數(shù)據(jù)時(shí)的止確性conn ection.setTransactionlsolation(C onn ection.TRANSACTION_READ_COMMITTED);V:可能出現(xiàn),X:不會(huì)出現(xiàn)隔離級(jí)別臟讀不可重復(fù)讀幻讀讀未捉交(Read uncommitted)VVV讀已提交(Read committed)XVV可重復(fù)讀(Repeatable read)XXV可串行化(Serializable )XXXC
17、傳智播客 一高級(jí)軟件人才夾作培訓(xùn)專家!存儲(chǔ)過程北京傳智播客教仃存儲(chǔ)過程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 級(jí)軟件人才夾作培訓(xùn)專家!其他的幾個(gè)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傳智播客 一髙級(jí)軟件人才夾作培訓(xùn)專家!其他的幾個(gè)API町滾動(dòng)的結(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傳智播客 一髙級(jí)軟件人才夾作培訓(xùn)專家!DatabaseMetaDatafllParameterlVletaDataDatabaseMetaData meta =connectio n.getMetaData();通過DatabaseMetaData可以獲得數(shù)據(jù)庫相關(guān)的信息如:數(shù)拯庫版本、數(shù)拯庫名、數(shù)據(jù)庫廠商信息、是否 支坪事務(wù)、是否支持某種事務(wù)隔離級(jí)別,是否支持滾 動(dòng)緒果集等。ParameterMe
21、taData pmd =preparedStatement.getParameterMetaData();通過ParameterMetaDatanf以獲得參數(shù)信息。北空傳智播客教仃C傳智播客 一髙級(jí)軟件人才賣作培訓(xùn)專家!、ResultSetMetaDataResultSetMetaData meta = rs.getMetaData();通過 ResultSetMetaData 町以獲得結(jié)果冇兒列、各列名、各列別 名.各列類型等。町以將 ResultSet 放入 Map(key:列名 value:列值)。用反射 ResultSetMetaData 將查詢結(jié)果讀入對(duì)彖中(簡單的 O/RMappi
22、ng)1)讓 SQL 語句中列別名和要讀入的對(duì)象屬性名一樣;2)通過 ResultSetMetaData 獲得結(jié)果列數(shù)和列別名;3)通過反射將對(duì)彖的所有 setXxx 方法找到;4)將 3) 找到的方法 setXxx 和 2) 找到的列別名進(jìn)行匹配 (即方法 中的 xxx 于列別名和等):5)由上一步找到的方法和列別名對(duì)應(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.-丿北京傳智播客教仃常用的開源實(shí)現(xiàn)DBCP使用DBCP必須用的三個(gè)包:commons-dbcp-1.2.1 .jar,commons-pool-1.2.jar, commons-collections-3.1 .jar配置參數(shù)。JavaAPI:BasicDataSourceFactory.creat
24、eDataSource( properties);北京傳智播客教仃C傳智播客一髙級(jí)軟件人才賣作培訓(xùn)專家!、使用繼承優(yōu)化JDB C代碼(模板模式)優(yōu)化查詢操作,區(qū)分開變化和不變的部分:sql和ResultSet的處理是變化部分,創(chuàng)建和釋放資源部分是不變部分。 提取超類,將不變部分放入超類,變化部分留給子類實(shí)現(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);傳智播客髙級(jí)軟件人才實(shí)作培訓(xùn)專家!、丿北京傳智播客教|7 C傳智播客 一髙級(jí)軟件人才賣作培訓(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傳智播客 一髙級(jí)軟件人才賣作培訓(xùn)專家!、Spring iKlJdbcTemplate丿北京:傳智播客教廠 傳智播客 一7T級(jí)軟件人才賣作培訓(xùn)專家!Spring 的 JdbcTevnplate 更新public int update(String sql, Object args)。插入數(shù)據(jù)并獲得結(jié)果:public Object execute(ConnectionCallback action)其他方法簡介V_丿
27、北京:傳智播客教廠 傳智播客 一7T級(jí)軟件人才賣作培訓(xùn)專家!SpringIT9NamedParameterJdbcTemplateig sql, SqIParameterSourcePPer)丿北京傳智播客教|7 C傳智播客 一 k 級(jí)軟件人才實(shí)作培訓(xùn)專家!Spring 的 Simple JdbcTemplateSimpleJdbcT emplate內(nèi)部包禽了 個(gè)N amedParameterJdbcTemplate;所以NamedParameterJdbcTemplate能做的爭怙SimpleJdbcTemplate能I , SimpleJdbcTemplate相對(duì)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(實(shí)現(xiàn)JdbcTemplate)aetNamed ParameterJdbcOperations返回的是NamedParameterJdbcOperations(實(shí)現(xiàn)是NamedParameterJdbcTemplate)北京傳智播客教I? 實(shí)現(xiàn) UserDao 接口實(shí)現(xiàn)UserDao接口修改perties文件,切換U serDao的 實(shí)現(xiàn)。測(cè)試UserDao的新的實(shí)現(xiàn)類。伶詢帶有參數(shù),和行映射方法:
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年農(nóng)業(yè)科學(xué)研究與試驗(yàn)發(fā)展服務(wù)合作協(xié)議書
- 電子閱讀器開發(fā)及內(nèi)容資源整合方案
- 個(gè)人工程勞務(wù)協(xié)議年
- 2025年懸掛式離子風(fēng)機(jī)項(xiàng)目合作計(jì)劃書
- 農(nóng)業(yè)生態(tài)技術(shù)應(yīng)用示范推廣協(xié)議
- 2025年殺螨隆項(xiàng)目合作計(jì)劃書
- 高級(jí)管理職務(wù)任職證明書(7篇)
- 城市智能停車設(shè)施采購協(xié)議
- 高端職位任職資歷證明書(7篇)
- 城市治理與市政發(fā)展反饋試題及答案
- 2025年中考?xì)v史復(fù)習(xí)專項(xiàng)訓(xùn)練:世界現(xiàn)代史選擇題100題(原卷版)
- 四年級(jí)下冊(cè)語文課外閱讀題三(5篇含答案)
- 山東省濟(jì)南市槐蔭區(qū)2024年五年級(jí)數(shù)學(xué)第二學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- 五年級(jí)小數(shù)乘法練習(xí)題300道及答案
- 萬達(dá)商家入駐商場合同(2024版)
- 【課件】初心與使命-時(shí)代的美術(shù)擔(dān)當(dāng)+課件-高中美術(shù)人美版(2019)美術(shù)鑒賞
- DLT 722-2014 變壓器油中溶解氣體分析和判斷導(dǎo)則
- 北師大版五年級(jí)下冊(cè)英語教案
- 鋁合金薄板的熱處理工藝與性能的研究
- 四川省成都市郫都區(qū)2023-2024學(xué)年數(shù)學(xué)五下期末調(diào)研試題含解析
- 四年級(jí)數(shù)學(xué)思維訓(xùn)練題
評(píng)論
0/150
提交評(píng)論