JDBC
JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)
是一種用于執(zhí)行SQL語句的Java API彩库,可以為多種關(guān)系數(shù)據(jù)庫提供統(tǒng)一訪問里覆,
它由一組用Java語言編寫的類和接口組成乘寒。JDBC提供了一種基準(zhǔn)幌蚊,據(jù)此可以構(gòu)建更高級(jí)的工具和接口熙掺,
使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應(yīng)用程序未斑,
JDBC實(shí)現(xiàn)了所有這些面向標(biāo)準(zhǔn)的目標(biāo)并且具有簡(jiǎn)單、嚴(yán)格類型定義且高性能實(shí)現(xiàn)的接口币绩。
JDBC是由一系列連接(Connection)蜡秽、SQL語句(Statement)和結(jié)果集(ResultSet)構(gòu)成的府阀,其主要作用概括起來有如下3個(gè)方面:
建立與數(shù)據(jù)庫的連接。
向數(shù)據(jù)庫發(fā)起查詢請(qǐng)求载城。
處理數(shù)據(jù)庫返回結(jié)果肌似。
1.用PreparedStatement來代替Statement會(huì)使代碼多出幾行,但這樣的代碼無論從可讀性還是可維護(hù)性上來說.都比直接用Statement的代碼高很多檔次
2、PreparedStatement盡最大可能提高性能诉瓦。
PreparedStatement是預(yù)編譯語句川队;預(yù)編譯語句有可能被重復(fù)調(diào)用,語句在被編譯器編譯后的執(zhí)行代碼被緩存下來,
下次調(diào)用時(shí)只要是相同的預(yù)編譯語句就不需要編譯,只要將參數(shù)直接傳入編譯過的語句執(zhí)行代碼中就會(huì)得到執(zhí)行睬澡。
3固额、極大地提高了安全性,可以有效的避免SQL注入煞聪。
JDBC API主要功能:與數(shù)據(jù)庫建立連接斗躏、執(zhí)行SQL 語句、處理結(jié)果
DriverManager :依據(jù)數(shù)據(jù)庫的不同昔脯,管理JDBC驅(qū)動(dòng)
Connection :負(fù)責(zé)連接數(shù)據(jù)庫并擔(dān)任傳送數(shù)據(jù)的任務(wù)
Statement :由 Connection 產(chǎn)生啄糙、負(fù)責(zé)執(zhí)行SQL語句
ResultSet:負(fù)責(zé)保存Statement執(zhí)行后所產(chǎn)生的查詢結(jié)果
JDBC驅(qū)動(dòng)由數(shù)據(jù)庫廠商提供
在個(gè)人開發(fā)與測(cè)試中,可以使用JDBC-ODBC橋連方式
在生產(chǎn)型開發(fā)中云稚,推薦使用純Java驅(qū)動(dòng)方式
使用JDBC-ODBC橋方式連接數(shù)據(jù)庫
將對(duì)JDBC API的調(diào)用隧饼,轉(zhuǎn)換為對(duì)另一組數(shù)據(jù)庫連接API的調(diào)用
優(yōu)點(diǎn):可以訪問所有ODBC可以訪問的數(shù)據(jù)庫
缺點(diǎn):執(zhí)行效率低、功能不夠強(qiáng)大
使用純Java方式連接數(shù)據(jù)庫
由JDBC驅(qū)動(dòng)直接訪問數(shù)據(jù)庫
優(yōu)點(diǎn):100% Java静陈,快又可跨平臺(tái)
缺點(diǎn):訪問不同的數(shù)據(jù)庫需要下載專用的JDBC驅(qū)動(dòng)
如何避免SQL注入的隱患燕雁?
使用PreparedStatement 接口
繼承自 Statement接口
比Statement對(duì)象使用起來更加靈活,更有效率
PreparedStatement接口
(預(yù)編譯的 SQL 語句
提高了代碼的可讀性和可維護(hù)性
提高了安全性
提高了SQL語句執(zhí)行的性能
JDBC訪問數(shù)據(jù)庫的步驟
加載JDBC驅(qū)動(dòng)
與數(shù)據(jù)庫建立連接
創(chuàng)建Statement或PreparedStatement對(duì)象
發(fā)送SQL語句鲸拥,并得到返回結(jié)果
處理返回結(jié)果
釋放資源
遍歷結(jié)果集中數(shù)據(jù)可使用列號(hào)或列名標(biāo)識(shí)列
PreparedStatement比Statement
提高了代碼的可讀性和可維護(hù)性拐格,提高了SQL語句執(zhí)行的性能,提高了安全性刑赶。
數(shù)據(jù)庫訪問層
持久化是將程序中的數(shù)據(jù)在瞬時(shí)狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制
DAO
Data Access Object(數(shù)據(jù)存取對(duì)象)
位于業(yè)務(wù)邏輯和持久化數(shù)據(jù)之間
實(shí)現(xiàn)對(duì)持久化數(shù)據(jù)的訪問
隔離業(yè)務(wù)邏輯代碼和數(shù)據(jù)訪問代碼
隔離不同數(shù)據(jù)庫的實(shí)現(xiàn)
DAO模式的組成部分
DAO接口
DAO實(shí)現(xiàn)類
實(shí)體類
數(shù)據(jù)庫連接和關(guān)閉工具類
PetDaoSQLServerImpl類的各個(gè)方法中有數(shù)據(jù)庫連接的建立和關(guān)閉操作捏浊,如何解決代碼重復(fù)問題?
如果更換了數(shù)據(jù)庫撞叨,各個(gè)方法都要修改金踪,如何解決此缺陷?
將數(shù)據(jù)庫連接的建立和關(guān)閉操作提取到一個(gè)專門類BaseDao中谒所,讓PetDaoSQLServerImpl類繼承BaseDao類
分層的特點(diǎn)
每一層都有自己的職責(zé)
上一層不用關(guān)心下一層的實(shí)現(xiàn)細(xì)節(jié),
上一層通過下一層提供的對(duì)外接口來使用其功能
上一層調(diào)用下一層的功能沛申,
下一層不能調(diào)用上一層功能
分層開發(fā)的好處:
各層專注于自己功能的實(shí)現(xiàn)劣领,
便于提高質(zhì)量
便于分工協(xié)作,
提高開發(fā)效率
便于代碼復(fù)用
便于程序擴(kuò)展
封裝性原則
每個(gè)層次向外公開接口铁材,但是隱藏內(nèi)部細(xì)節(jié)
順序訪問原則
下一層為上一層服務(wù)尖淘,但不使用上層的服務(wù)
分層結(jié)構(gòu)中奕锌,不同層之間通過實(shí)體類傳輸數(shù)據(jù)
DAO位于業(yè)務(wù)邏輯和持久化數(shù)據(jù)之間,實(shí)現(xiàn)對(duì)持久化數(shù)據(jù)的訪問
主要由DAO接口村生、DAO實(shí)現(xiàn)類惊暴、實(shí)體類組成
數(shù)據(jù)庫連接和關(guān)閉工具類為了代碼復(fù)用
分層開發(fā)的特點(diǎn)
每一層都有自己的職責(zé)
上一層調(diào)用下一層的功能,下一層不能調(diào)用上一層功能
分層開發(fā)的優(yōu)勢(shì)及原則
便于提高開發(fā)質(zhì)量趁桃、提高開發(fā)效率辽话、便于代碼復(fù)用、便于程序擴(kuò)展卫病、便于降低代碼的耦合性油啤。
分層時(shí)應(yīng)堅(jiān)持封裝性原則和順序訪問原則
不同層之間通過實(shí)體類傳輸數(shù)據(jù)