《JDBC數(shù)據(jù)庫連接javaEE.ppt》由會員分享,可在線閱讀,更多相關《JDBC數(shù)據(jù)庫連接javaEE.ppt(72頁珍藏版)》請在裝配圖網上搜索。
1、JDBC,1,JDBC基礎,2,JDBC基礎,JDBC的全稱是 Java Database Connectivity,即Java數(shù)據(jù)庫連接,它是一種可以執(zhí)行SQL語句的Java API。 Java API是接口,其實現(xiàn)類由各數(shù)據(jù)庫廠商提供實現(xiàn),這些實現(xiàn)類就是“驅動程序”。 正是通過JDBC驅動的轉換,才使得使用相同JDBC API編寫的程序,可以在不同的數(shù)據(jù)庫系統(tǒng)上運行良好。,3,JDBC基礎,JDBC編程步驟(一):,4,驅動類對應的字符串: MySql:com.mysql.jdbc.Driver SQLServer:com.microsoft.sqlserver.jdbc
2、.SQLServerDriver 數(shù)據(jù)庫URL: MySql:jdbc:mysql://127.0.0.1:3306/sms SQLServer:jdbc:sqlserver://127.0.0.1:1433;DatabaseName=sms,JDBC基礎,JDBC編程步驟(二):,5,注意:以上整個示例代碼,應該使用try catch finally釋放資源,JDBC基礎,JDBC_增刪改操作:,6,JDBC基礎,JDBC_前幾頁PPT代碼分析: Url、User、Password直接在代碼中定義,如果數(shù)據(jù)庫服務器稍作變動,怎么辦? 一個項目基本針對一個底層數(shù)據(jù)庫,難道每次操作數(shù)
3、據(jù)庫,都要注冊一次驅動程序嘛?是否可以只注冊一次? 獲取數(shù)據(jù)庫連接時,每次都需要Url、User、Password,一旦改動其中一個數(shù)據(jù),意味著要修改所有此處的代碼。 釋放資源,每次數(shù)據(jù)庫操作后,都需要釋放資源,難道每次操作后都要寫三次try close catch代碼嘛?,7,JDBC基礎,JDBC_封裝升級(一):,8,JDBC基礎,JDBC_封裝升級(二):,9,JDBC基礎,JDBC_封裝升級(三):,10,JDBC基礎,JDBC_封裝升級(四):,11,JDBC基礎,Statement的缺點: 同樣的SQL語句,每次都要發(fā)送,不能進行有效的緩存。 拼接SQL字符串非常容易出現(xiàn)錯誤。
4、不能防止惡意數(shù)據(jù),易產生SQL注入。 升級后的新接口PreparedStatement(推薦): 預編譯SQL語句,并進行有效的緩存,性能更好。 允許使用問號占位符參數(shù),并且該參數(shù)必須獲得值后才可以執(zhí)行。 無需拼接SQL語句。,12,SQL注入:“...where name=” + “or 1=1 or” + “and password=”+ “”+ “”,問號占位符參數(shù):INSERT INTO User(id,name,age,birthday) VALUES(?,?,?,?);,JDBC基礎,JDBC_ PreparedStatement(一):,13,JDBC基礎,JDBC_ Prepa
5、redStatement(二):,14,JDBC基礎,JDBC_疑難雜癥: 獲取插入記錄后的自增長值 日期類型(datetime) 文本信息(text):varchar的最大長度為65535左右 二進制文件(blob),15,JDBC基礎,JDBC_疑難雜癥(一):自增長值、日期(寫入),16,JDBC基礎,JDBC_疑難雜癥(一):自增長值、日期(讀?。?17,JDBC基礎,JDBC_疑難雜癥(二):文本信息text(寫入),18,JDBC基礎,JDBC_疑難雜癥(二):文本信息text(讀?。?19,JDBC基礎,JDBC_疑難雜癥(三):二進制文件(寫入),20,JDBC基礎,JDBC_
6、疑難雜癥(三):二進制文件(讀?。?21,JDBC基礎,JDBC_事務處理: 事務處理就是當執(zhí)行多個SQL指令時,如果因為某個原因使其中一條指令執(zhí)行有錯誤,則取消先前執(zhí)行過的所有指令。它的作用是保證各項操作的一致性和完整性。 JDBC事務是通過Connection對象進行控制的。其提供了兩種事務: 自動提交模式:系統(tǒng)默認,每項數(shù)據(jù)庫操作成功后,系統(tǒng)會自動提交。 手工提交模式:首先必須取消自動提交模式,然后通過commit()和rollback()提交和回滾事務。,22,JDBC基礎,JDBC_事務處理:,23,JDBC基礎,JDBC提供:DatabaseMetaData封裝數(shù)據(jù)庫相關信
7、息,24,JDBC基礎,JDBC提供:ResultSetMetaData封裝結果集相關信息,25,連接池,26,連接池,JDBC數(shù)據(jù)庫連接的建立及關閉是極耗系統(tǒng)資源的操作。之前獲得的數(shù)據(jù)庫連接,一個數(shù)據(jù)庫連接對象均為一個物理數(shù)據(jù)庫連接,每次操作都打開一個物理連接,使用完后立即關閉連接。頻繁地打開、關閉連接將造成系統(tǒng)性能低下。 數(shù)據(jù)庫連接池的解決方案是:當應用程序啟動時,系統(tǒng)主動建立足夠的數(shù)據(jù)庫連接,并將這些連接組成一個連接池。每次應用程序請求數(shù)據(jù)庫連接時,無須重新打開連接,而是從池中取出已有的連接使用,使用完后,不再關閉數(shù)據(jù)庫連接,而是直接將連接歸還給連接池。,27,連接池,數(shù)據(jù)庫連接池
8、基本工作原理:,28,連接池,自定義數(shù)據(jù)庫連接池(一):,29,連接池,自定義數(shù)據(jù)庫連接池(二):,30,連接池,自定義數(shù)據(jù)庫連接池(三):,31,連接池,自定義數(shù)據(jù)庫連接池(四):,32,連接池,自定義數(shù)據(jù)庫連接池(五):,33,連接池,非連接池與連接池對比(一):,34,連接池,非連接池與連接池對比(二):,35,連接池,開源的數(shù)據(jù)源(DBCP)(一):,36,連接池,開源的數(shù)據(jù)源(DBCP)(二):,37,連接池,開源的數(shù)據(jù)源(C3P0)(一):,38,連接池,開源的數(shù)據(jù)源( C3P0 )(二):,39,JDBC常見操作(重點),40,JDBC常見操作,基于數(shù)據(jù)庫的信息系統(tǒng),每張數(shù)據(jù)表基
9、本都包含如下操作(函數(shù)): 新增記錄、修改記錄、刪除記錄 根據(jù)主鍵獲取單個記錄 根據(jù)記錄數(shù) 獲取所有記錄 獲取分頁記錄 PS:以上僅為基本操作,實際中還需包含其它復雜操作。 以上操作中,數(shù)據(jù)的傳入傳出都以對象形式,所有每張數(shù)據(jù)表對應一個實體類(列名對應屬性名),41,JDBC常見操作,后續(xù)以選課系統(tǒng)sms數(shù)據(jù)庫中的class數(shù)據(jù)表作為操作范例:,42,PS:數(shù)據(jù)表的列與實體類的屬性一一對應,JDBC常見操作,純JDBC操作(一):,43,JDBC常見操作,純JDBC操作(二):,44,JDBC常見操作,純JDBC操作(三):,45,JDBC常見操作,純JDBC操作(四):,46,JDBC常見操
10、作,純JDBC操作(五):,47,JDBC常見操作,純JDBC操作(六):,48,JDBC常見操作,純JDBC操作(七):,49,JDBC常見操作,純JDBC操作(八):,50,JDBC常見操作,以上全部操作中,太多的代碼重復,如下: 每次都要獲取Connection 每次都要創(chuàng)建PreparedStatement 每次都要設置參數(shù)值 每次都要執(zhí)行Query或Update操作 每次都要關閉數(shù)據(jù)庫連接 因此可以進行代碼封裝重構,所以市面出現(xiàn)了眾多封裝后的JDBC操作工具類,此PPT中使用 Apache DBUtils 注意:對于Apache DBUtils,要求JavaBean(實體類)的屬性名
11、必須與結果集中的列名一一對應?。?!,51,JDBC常見操作,Apache DBUtils操作(一):,52,JDBC常見操作,Apache DBUtils操作(二):,53,JDBC常見操作,Apache DBUtils操作(三):,54,JDBC常見操作,Apache DBUtils操作(四):,55,JDBC常見操作,Apache DBUtils操作(五):,56,JDBC常見操作,Apache DBUtils操作(六):,57,DAO設計模式,58,DAO設計模式,Java EE架構大致分為如下幾層: Domain Object(領域對象)層:此層由系列的POJO(Plain Old J
12、ava Object,普通的、傳統(tǒng)的Java對象)組成,這些對象是該系統(tǒng)的Domain Object,往往包含了各自所需要實現(xiàn)的業(yè)務邏輯方法。 DAO(Data Access Object,數(shù)據(jù)訪問對象)層:此層由系列的DAO組件組成,這些DAO實現(xiàn)了對數(shù)據(jù)庫的創(chuàng)建、查詢、更新和刪除(CRUD)等原子操作。 業(yè)務邏輯層:此層由系列的業(yè)務對象組成,這些業(yè)務邏輯對象實現(xiàn)了系統(tǒng)所需要的業(yè)務邏輯方法。這些業(yè)務邏輯方法可能僅僅用于暴露DomainObject對象所實現(xiàn)的業(yè)務邏輯方法,也可能是依賴DAO組件實現(xiàn)的業(yè)務邏輯方法。 控制器層:此層由系列控制器組成,這些控制器用于攔截用戶請求,并調用業(yè)務邏輯組件
13、的業(yè)務邏輯方法,處理用戶請求,并根據(jù)處理結果轉發(fā)到不同的表現(xiàn)層組件。 表現(xiàn)層:此層由系列的JSP頁面、Velocity頁面、PDF文檔視圖組件組成。此層負責收集用戶請求,并將顯示處理結果。,59,DAO設計模式,大致上,Java EE 應用的架構如圖所示:,60,Model:對應數(shù)據(jù)庫表的實體類(屬性與表中字段對應),XxDao:接口,定義對XX表的“增刪改查”方法名 XxDaoImpl:對應接口的實現(xiàn)類,針對JDBC或Hibernate等的實現(xiàn),XxService:接口,實現(xiàn)業(yè)務邏輯,定義實現(xiàn)系統(tǒng)功能的方法名 XxServiceImpl:對應接口的實現(xiàn)類,調用Dao中的方法,外加某些業(yè)務邏輯
14、判斷,DAO設計模式,DAO實現(xiàn)(一):Model,61,DAO設計模式,DAO實現(xiàn)(二):Dao,62,DAO設計模式,DAO實現(xiàn)(三):JdbcUtil,63,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(一),64,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(二),65,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(三),66,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(四),67,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(五),68,DAO設計模式,DAO實現(xiàn)(四):DaoImpl(六),69,DAO設計模式,DAO實現(xiàn)(五):Main驗證(一),70,DAO設計模式,DAO實現(xiàn)(五):Main驗證(二),71,答疑,Q & A,72,