版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編輯pptJDBC 數(shù)據(jù)庫應用編輯ppt 簡介 JDBC(Java Data Base Connectivity)1996年,sun公司提出。是一種用于執(zhí)行SQL語句的Java API,可以為多種關系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。JDBC提供了一種基準,據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序用處:和數(shù)據(jù)可建立連接,發(fā)送SQL語句,處理數(shù)據(jù)庫返回的結果集編輯ppt JDBC主要完成的工作1. 注冊JDBC驅動程序2.建立與數(shù)據(jù)庫的連接3.使用SQL語句進行數(shù)據(jù)庫操作4.關閉相關連接編輯ppt注冊JDBC驅動程序 Class.forn
2、ame(“com.mysql.jdbc.Driver”);常用 Class.forname(“com.microsofe.sqlserver.jdbc.SQLServerDriver”);常用 DriverManager.registerDriver(com.mysql.jdbc.Driver);會造成DriverManager中產生兩個一樣的驅動,并會對具體的驅動類產生依賴 System.setProperty(“jdbc.drivers”, “driver1: driber2”);雖然不會對具體的驅動類產生依賴,但注冊不太方便,所以很少使用 驅動類型:JDBC-ODBC橋+ODBC驅動程序
3、;本地API;JDBC網(wǎng)絡純Java驅動程序;本地協(xié)議純Java驅動程序編輯ppt建立與數(shù)據(jù)庫的連接 Connection con = DriverManger.getConnection(url, username, password); url格式: JDBC:子協(xié)議:子名稱/主機名:端口/數(shù)據(jù)庫名如:mysql本地數(shù)據(jù)庫:jdbc:mysql:/localhost:3306/數(shù)據(jù)庫名字Username,Password為數(shù)據(jù)庫的登陸名和密碼,使用“屬性名=屬性值”的方式如:Connection con = DriverManager.getConnection(jdbc:mysql:/l
4、ocalhost:3306/test, root, root);編輯ppt使用SQL進行數(shù)據(jù)庫操作 使用JDBC執(zhí)行SQL語句前,必須先創(chuàng)建Statement對象。調用Conection對象的createStatement()方法,該方法返回一個Statement對象 使用如下方式: Statement stmt = con.createStatement();使用statement對象發(fā)送SQL語句編輯ppt使用SQL進行數(shù)據(jù)庫操作對數(shù)據(jù)庫的操作主要有:添加,刪除,修改,查看四種。添加:Sql語句:insert into 表名(field1 , field2) values(value1,v
5、alue2);如:insert into student(id , name) values(“001”,”李明”);發(fā)送sql語句:statement.executeUpdate(sql);返回的結果:int(1代表成功,0代表失?。┚庉媝pt使用SQL進行數(shù)據(jù)庫操作刪除: SQL語句:delete from 表名where 范圍如:delete from student where id=001;發(fā)送sql語句:statement.executeUpdate(sql);返回的結果:int(1代表成功,0代表失敗)編輯ppt使用SQL進行數(shù)據(jù)庫操作修改: SQL語句:update 表名set
6、 field1=value1 where 范圍如:update student set name=李四 where id=001;發(fā)送sql語句:statement.executeUpdate(sql);返回的結果:int(1代表成功,0代表失敗)編輯ppt使用SQL進行數(shù)據(jù)庫操作查看: SQL語句:select * from 表名 where 范圍如:select * from student where id=001;發(fā)送sql語句:statement.executeQuery(sql);返回的結果:resultSet (結果集) resultSet .next()查找下一個;result
7、Set. getString(id)取出一個對象的屬性編輯ppt使用SQL進行數(shù)據(jù)庫操作 總結: 增、刪、改用來完成,返回整數(shù)(匹配的記錄數(shù)),這類操作相對簡單。 查詢用來完成,返回的是ResultSet對象,ResultSet中包含了查詢的結果;查詢相對與增、刪、改要復雜一些,因為有查詢結果要處理。編輯ppt關閉相關連接 打開的資源使用完成后應該關閉resultSet.close();Statement.close();Connection.close();注意:資源關閉的順序應該和打開的順序相反打開的資源必須關閉,不然會造成對資源的浪費,并且再次連接時會無法連接編輯pptSQLSQL注入注
8、入,PreparedStatement,PreparedStatement和和StatementStatement 在SQL中包含特殊字符或SQL的關鍵字(如: or 1 or )時Statement將出現(xiàn)不可預料的結果(出現(xiàn)異常或查詢的結果不正確),可用PreparedStatement來解決。 PreperedStatement(從Statement擴展而來)相對Statement的優(yōu)點:1.沒有SQL注入的問題。會使數(shù)據(jù)庫頻繁編譯SQL,可能造成數(shù)據(jù)庫緩沖區(qū)溢出。3.數(shù)據(jù)庫和驅動可以對PreperedStatement進行優(yōu)化(只有在相關聯(lián)的數(shù)據(jù)庫連接沒有關閉的情況下有效)。 編輯ppt
9、數(shù)據(jù)類型數(shù)據(jù)類型 詳細信息見 幾種特殊且比較常用的類型1.DATA,TIME,TIMESTAMP date,time,datetime存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); ?。簉s.getDate(i); rs.getTime(i); rs.getTimestamp(i);2.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s); ?。簉eader = rs. getCharacterStream(i); read
10、er = rs.getClob(i).getCharacterStream(); string = rs.getString(i);編輯ppt數(shù)據(jù)類型數(shù)據(jù)類型3.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); ?。簉s.getBinaryStream(i); rs.getBlob(i).getBinaryStream(); 編輯ppt一個簡單用戶相關的數(shù)據(jù)訪問層一個簡單用戶相關的數(shù)據(jù)訪問層 J2EE三層架構簡介表示層 、業(yè)務邏輯層、數(shù)據(jù)訪問層,三層之間用接口隔離。 定義domain對象User,定義存取用戶的接口 用JDBC實現(xiàn)接
11、口 用配置文件(properties)和反射實現(xiàn)與具體類的耦合 編輯ppt事務事務( (ACID) ) 原子性(atomicity):組成事務處理的語句形成了一個邏輯單元,不能只執(zhí)行其中的一部分。 一致性(consistency):在事務處理執(zhí)行前后,數(shù)據(jù)庫是一致的(兩個賬戶要么都變,或者都不變)。 隔離性(isolcation):一個事務處理對另一個事務處理沒有影響。 持續(xù)性(durability):事務處理的效果能夠被永久保存下來 。 connection.setAutoCommit(false);/打開事務。 mit();/提交事務。 connection.rollback();/回滾事
12、務。編輯ppt隔離級別隔離級別多線程并發(fā)讀取數(shù)據(jù)時的正確性 connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED); V:可能出現(xiàn),X:不會出現(xiàn)隔離級別隔離級別 臟讀臟讀 不可重復讀不可重復讀 幻讀幻讀 讀未提交(Read uncommitted)VVV讀已提交(Read committed)xVV可重復讀(Repeatable read)xxV可串行化(Serializable )xxx編輯ppt存儲過程 存儲過程CallableStatement(從PreperedStatement擴展來)cs =
13、 connection.prepareCall(“call psname(?,?,?)”);cs.registerOutParameter(index, Types.INTEGER);cs.setXXX(i, xxxx);cs.executeUpdate();int id=cs.getInt(index);編輯ppt其他的幾個其他的幾個APIAPI Statement.getGeneratedKeys()PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);ps.exec
14、uteUpdate();ResultSet rs = st.getGeneratedKeys();rs.getInt(1); 批處理,可以大幅度提升大量增、刪、改的速度。PreparedStatement.addBatch();PreparedStatement.executeBatch();編輯ppt其他的幾個其他的幾個APIAPI 可滾動的結果集Statement st = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);ResultSet rs = st.exe
15、cuteQuery(sql);rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast();rs.absolute(9);rs.moveToInsertRow();編輯pptDatabaseMetaData DatabaseMetaData meta = connection.getMetaData(); 通過DatabaseMetaData可以獲得數(shù)據(jù)庫相關的信息如:數(shù)據(jù)庫版本、數(shù)據(jù)庫名、數(shù)據(jù)庫廠商信息、是否支持事務、是否支持某種事務隔離級別,是否支持滾動結果集等。編輯pptResultSetMe
16、taData ResultSetMetaData meta = rs.getMetaData(); 通過ResultSetMetaData可以獲得結果有幾列、各列名、各列別名、各列類型等。 可以將ResultSet放入Map(key:列名 value:列值)。 用反射ResultSetMetaData將查詢結果讀入對象中(簡單的O/RMapping) 1)讓SQL語句中列別名和要讀入的對象屬性名一樣;2)通過ResultSetMetaData獲得結果列數(shù)和列別名;3)通過反射將對象的所有setXxx方法找到;4)將3)找到的方法setXxx和2)找到的列別名進行匹配(即方法中的xxx于列別名相
17、等);5)由上一步找到的方法和列別名對應關系進行賦值Method.invoke(obj, rs.getObject(columnAliasName);編輯ppt數(shù)據(jù)源和連接池數(shù)據(jù)源和連接池 DataSource用來取代DriverManager來獲取Connection; 通過DataSource獲得Connection速度很快; 通過DataSource獲得的Connection都是已經被包裹過的(不是驅動原來的連接),他的close方法已經被修改。 一般DataSource內部會用一個連接池來緩存Connection,這樣可以大幅度提高數(shù)據(jù)庫的訪問速度; 連接池可以理解成一個能夠存放Con
18、nection的Collection; 我們的程序只和DataSource打交道,不會直接訪問連接池;編輯ppt一個簡單的數(shù)據(jù)源一個簡單的數(shù)據(jù)源實現(xiàn) 使用裝飾模式的Connection(核心代碼)class MyConnection implements Connectionprivate Connection realConn;private LinkedList connPool;MyConnection(Connection rConn, LinkedList cPool)this.realConn=rConn;this.connPool=cPool;public void close()this.connPool.addLast(this);/.編輯ppt一個簡單的數(shù)據(jù)源一個簡單的數(shù)據(jù)源實現(xiàn) DataSource(核心代碼)class MyDataSource implements DataSourceprivate LinkedList connPool = new Vector();public Connection getConneciton ()if(this.connPool.size()0)return this.connPool.removeFirst(0);return createCo
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學技術職業(yè)學院《數(shù)據(jù)新聞理論與實踐》2023-2024學年第一學期期末試卷
- 廣東酒店管理職業(yè)技術學院《英語三》2023-2024學年第一學期期末試卷
- 廣東金融學院《金融建模與量化分析》2023-2024學年第一學期期末試卷
- 廣東金融學院《中文信息處理技術》2023-2024學年第一學期期末試卷
- 廣東環(huán)境保護工程職業(yè)學院《西方舞蹈史》2023-2024學年第一學期期末試卷
- 廣東東軟學院《酒店客戶管理實驗》2023-2024學年第一學期期末試卷
- 廣東創(chuàng)新科技職業(yè)學院《故事醫(yī)學》2023-2024學年第一學期期末試卷
- 《建筑材料管理》課件
- 小學生課件插花圖片
- 贛南醫(yī)學院《即興彈唱》2023-2024學年第一學期期末試卷
- 2025屆安徽省合肥市一六八中高二數(shù)學第一學期期末經典試題含解析
- 自來水廠考試題庫單選題100道及答案解析
- 冷庫建設項目可行性研究報告5篇
- 教育學院院長述職報告范文
- 杭州市西湖區(qū)2024年三年級數(shù)學第一學期期末學業(yè)質量監(jiān)測試題含解析
- 2022-2023學年廣東省廣州市花都區(qū)六年級(上)期末英語試卷(含答案)
- 機械設計制造及其自動化實習總結報告
- 2024年湖南省高中學業(yè)水平合格考物理試卷真題(含答案詳解)
- 機動車檢測站質量手冊(根據(jù)補充技術要求修訂)
- 2024年(學習強國)思想政治理論知識考試題庫與答案
- 上海上海市醫(yī)療急救中心招聘筆試歷年典型考題及考點附答案解析
評論
0/150
提交評論