




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、JDBC 數據庫運用 簡介 JDBC(Java Data Base Connectivity) 1996年,sun公司提出。是一種用于執行SQL語句的Java API,可以為多種關系數據庫提供一致訪問,它由一組用Java言語編寫的類和接口組成。JDBC提供了一種基準,據此可以構建更高級的工具和接口,使數據庫開發人員可以編寫數據庫運用程序 用途:和數據可建立銜接,發送SQL語句,處置數據庫前往的結果集 JDBC主要完成的任務1. 注冊JDBC驅動程序2.建立與數據庫的銜接3.運用SQL語句進展數據庫操作4.封鎖相關銜接注冊JDBC驅動程序 Class.forname(“com.mysql.jdb
2、c.Driver);常用 Class.forname(“com.microsofe.sqlserver.jdbc.SQLServerDriver);常用 DriverManager.registerDriver(com.mysql.jdbc.Driver);會呵斥DriverManager中產生兩個一樣的驅動,并會對詳細的驅動類產生依賴 System.setProperty(“jdbc.drivers, “driver1: driber2);雖然不會對詳細的驅動類產生依賴,但注冊不太方便,所以很少運用 驅動類型:JDBC-ODBC橋+ODBC驅動程序;本地API;JDBC網絡純Java驅動程序
3、;本地協議純Java驅動程序建立與數據庫的銜接 Connection con = DriverManger.getConnection(url, username, password); url格式: JDBC:子協議:子稱號/主機名:端口/數據庫名 如:mysql本地數據庫:jdbc:mysqllocalhost:3306/數據庫名字 Username,Password為數據庫的登陸名和密碼,運用“屬性名=屬性值的方式 如:Connection con = DriverManager.getConnection(jdbc:mysqllocalhost:3306/test, root, roo
4、t);運用SQL進展數據庫操作 運用JDBC執行SQL語句前,必需先創建Statement對象。調用Conection對象的createStatement()方法,該方法前往一個Statement對象 運用如下方式: Statement stmt = con.createStatement(); 運用statement對象發送SQL語句運用SQL進展數據庫操作對數據庫的操作主要有:添加,刪除,修正,查看四種。添加:Sql語句:insert into 表名(field1 , field2) values(value1,value2);如:insert into student(id , name
5、) values(“001,李明);發送sql語句:statement.executeUpdate(sql);前往的結果:int1代表勝利,0代表失敗運用SQL進展數據庫操作刪除:SQL語句:delete from 表名where 范圍如:delete from student where id=001;發送sql語句:statement.executeUpdate(sql);前往的結果:int1代表勝利,0代表失敗運用SQL進展數據庫操作修正:SQL語句:update 表名set field1=value1 where 范圍如:update student set name=李四 where
6、 id=001;發送sql語句:statement.executeUpdate(sql);前往的結果:int1代表勝利,0代表失敗運用SQL進展數據庫操作查看:SQL語句:select * from 表名 where 范圍如:select * from student where id=001;發送sql語句:statement.executeQuery(sql);前往的結果:resultSet (結果集) resultSet .next()查找下一個;resultSet. getString(id)取出一個對象的屬性運用SQL進展數據庫操作 總結: 增、刪、改用Statement.execu
7、teUpdate來完成,前往整數(匹配的記錄數),這類操作相對簡單。 查詢用Statement.executeQuery來完成,前往的是ResultSet對象,ResultSet中包含了查詢的結果;查詢相對與增、刪、改要復雜一些,由于有查詢結果要處置。封鎖相關銜接 翻開的資源運用完成后應該封鎖 resultSet.close(); Statement.close(); Connection.close(); 留意:資源封鎖的順序應該和翻開的順序相反 翻開的資源必需封鎖,不然會呵斥對資源的浪費,并且再次銜接時會無法銜接SQLSQL注入注入,PreparedStatement,PreparedSt
8、atement和和Statement Statement 在SQL中包含特殊字符或SQL的關鍵字(如: or 1 or )時Statement將出現不可預料的結果出現異常或查詢的結果不正確,可用PreparedStatement來處理。 PreperedStatement從Statement擴展而來相對Statement的優點: 1.沒有SQL注入的問題。 2.Statement會使數據庫頻繁編譯SQL,能夠呵斥數據庫緩沖區溢出。 3.數據庫和驅動可以對PreperedStatement進展優化只需在相關聯的數據庫銜接沒有封鎖的情況下有效。 數據類型數據類型 詳細信息見java.sql.Typ
9、es 幾種特殊且比較常用的類型 1.DATA,TIME,TIMESTAMP date,time,datetime 存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); 取:rs.getDate(i); rs.getTime(i); rs.getTimestamp(i); 2.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s); 取:reader = rs. getCharacterStream(i); reader = rs.g
10、etClob(i).getCharacterStream(); string = rs.getString(i); 數據類型數據類型3.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); 取:rs.getBinaryStream(i); rs.getBlob(i).getBinaryStream(); 一個簡單用戶相關的數據訪問層一個簡單用戶相關的數據訪問層 J2EE三層架構簡介 表示層 、業務邏輯層、數據訪問層,三層之間用接口隔離。 定義domain對象User,定義存取用戶的接口 用JDBC實現接口 用配置文件(propertie
11、s)和反射實現與詳細類的耦合 事務事務(ACID)(ACID) 原子性(atomicity):組成事務處置的語句構成了一個邏輯單元,不能只執行其中的一部分。 一致性(consistency):在事務處置執行前后,數據庫是一致的(兩個賬戶要么都變,或者都不變)。 隔離性(isolcation):一個事務處置對另一個事務處置沒有影響。 繼續性(durability):事務處置的效果可以被永久保管下來 。 connection.setAutoCommit(false);/翻開事務。 connectionmit();/提交事務。 connection.rollback();/回滾事務。隔離級別多線程并
12、發讀取數據時的正隔離級別多線程并發讀取數據時的正確性確性 connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); V:能夠出現,X:不會出現隔離級別隔離級別 臟讀臟讀 不可重復讀不可重復讀 幻讀幻讀 讀未提交(Read uncommitted)VVV讀已提交(Read committed)xVV可重復讀(Repeatable read)xxV可串行化(Serializable )xxx存儲過程 存儲過程 CallableStatement從PreperedStatement擴展來 cs = conne
13、ction.prepareCall(“call psname(?,?,?); cs.registerOutParameter(index, Types.INTEGER); cs.setXXX(i, xxxx); cs.executeUpdate(); int id=cs.getInt(index);其他的幾個其他的幾個APIAPI Statement.getGeneratedKeys() PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.executeUpda
14、te(); ResultSet rs = st.getGeneratedKeys();rs.getInt(1); 批處置,可以大幅度提升大量增、刪、改的速度。 PreparedStatement.addBatch(); PreparedStatement.executeBatch();其他的幾個其他的幾個APIAPI 可滾動的結果集 Statement st = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executeQue
15、ry(sql); rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast(); rs.absolute(9);rs.moveToInsertRow();DatabaseMetaData DatabaseMetaData meta = connection.getMetaData(); 經過DatabaseMetaData可以獲得數據庫相關的信息如:數據庫版本、數據庫名、數據庫廠商信息、能否支持事務、能否支持某種事務隔離級別,能否支持滾動結果集等。ResultSetMetaData ResultSe
16、tMetaData meta = rs.getMetaData(); 經過ResultSetMetaData可以獲得結果有幾列、各列名、各列別名、各列類型等。 可以將ResultSet放入Map(key:列名 value:列值)。 用反射ResultSetMetaData將查詢結果讀入對象中簡單的O/RMapping 1)讓SQL語句中列別名和要讀入的對象屬性名一樣; 2)經過ResultSetMetaData獲得結果列數和列別名; 3)經過反射將對象的一切setXxx方法找到; 4)將3找到的方法setXxx和2找到的列別名進展匹配即方法中的xxx于列別名相等; 5)由上一步找到的方法和列別
17、名對應關系進展賦值 Method.invoke(obj, rs.getObject(columnAliasName);數據源和銜接池數據源和銜接池 DataSource用來取代DriverManager來獲取Connection; 經過DataSource獲得Connection速度很快; 經過DataSource獲得的Connection都是曾經被包裹過的不是驅動原來的銜接,他的close方法曾經被修正。 普通DataSource內部會用一個銜接池來緩存Connection,這樣可以大幅度提高數據庫的訪問速度; 銜接池可以了解成一個可以存放Connection的Collection; 我們的
18、程序只和DataSource打交道,不會直接訪問銜接池;一個簡單的數據源實現一個簡單的數據源實現 運用裝飾方式的Connection(中心代碼) class MyConnection implements Connection private Connection realConn; private LinkedList connPool; MyConnection(Connection rConn, LinkedList cPool) this.realConn=rConn; this.connPool=cPool; public void close() this.connPool.addLast(this);/.一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020-2025年中國紐甜行業發展趨勢預測及投資戰略咨詢報告
- 中國IA服務器市場發展前景預測及投資戰略研究報告
- 2023-2028年中國茯苓種植行業市場深度分析及投資策略咨詢報告
- 中國直流無刷電機行業市場全景評估及發展戰略研究報告
- 廣東羥甲基丙烯酰胺 項目申請報告
- 中國實驗柜行業市場發展現狀及投資戰略咨詢報告
- 薄膜太陽能電池項目節能評估報告(節能專用)
- 2025年中國鐵道及電車道枕木行業市場調查研究及投資前景預測報告
- 中國帶底盆磨砂花盆行業市場發展前景及發展趨勢與投資戰略研究報告(2024-2030)
- 中國EDI超純水系統行業市場調研及投資戰略研究報告
- 疏通馬桶下水道培訓課件
- 大邑蓄水池清淤施工方案
- 2024-2025學年高中物理 第四章 光的折射 1 光的折射定律說課稿1 教科版選修3-4
- 2025年度尿素肥料采購合同范本及環保要求解析3篇
- 職業發展計劃和個人成長
- 溶洞相關知識培訓課件
- 材料設備進場計劃及保證措施
- 【大學課件】道路工程測量2
- 機械加工價格表
- 新材料在綠色制造中的應用及發展趨勢分析
- 醫用耗材采購風險管理工作總結
評論
0/150
提交評論