# JDBC重點整理 ## JDBC幹嘛的? 應用程式與資料庫之間的橄欖枝,透過JDBC來跟資料庫溝通(CRUD,新查修刪)。 因為資料庫種類繁多,若要個別寫對應的程式碼,開發人員會哭死(我是JAVA小弟不是DBA大哥),所以乾脆由JAVA這邊先出規格、統一資料型別與方法命名,讓資料庫開發人員實作。 ## 與JDBC有關的各個角色 * JAVA開發人員:<font color = red>定義規格、統一資料型別與方法命名</font> * 系統提示:野生的JDBC標準API介面跳出來了!! * 各家廠商:超爽ㄉ~~ 我只要去實做這個介面就好惹~~ (製作出各種driver的jar包) * 使用者:我只要抓下來import就好了吼? ## JDBC API套件 * JDBC API已包含在JDK中 java.sql:核心API,基本功能 javax.sql:多一個x比較厲害,所以可以支援進階功能(x = Extension) (合理懷疑docx、pptx等等也是同樣命名方式) ## JDBC Driver 因為各家廠商皆有實作其JDBC Driver,所以換資料庫的時候只要把對應新資料庫的Driver jar包import進來即可。 * 降低相依性 * 潮爽DER~~ ### 四種JDBC Driver~~呼吸法~~ #### Type 1 Driver(Driver第一型) * 名稱:JDBC-ODBC Bridge Driver * 微軟拔刀相助 * 把JDBC運作轉成ODBC的機制來連接資料庫 * 存取數度與功能皆受限(微軟的陰謀?) * 從JDK 8開始被移除 #### Type 2 Driver(Driver第二型) * 名稱:Native API Driver * 以「原生」方式呼叫資料庫提供的原生程式庫 * 速度比第一型快 * 須預先裝載資料庫所需之原生程式庫(所以沒做到跨平台) #### Type 3 Driver(Driver第三型) * 名稱:JDBC-Net Driver * 在使用者與資料庫之間另外架一個server * 透過特定的網路協定連線到server,透過server操作資料庫 * 彈性較佳 * 速度較慢(畢竟要透過server這個中繼站) #### Type 4 Driver(Driver第四型) * 名稱:Native Protocol Driver * 通常由資料庫廠商提供(YA~) * 完全透過Java技術實現,所以可以跨平台 * 為最常見的Driver類型 ## java.sql內裝 interface系列: 1. Driver:各廠牌的JDBC Driver都要實作的接口,使用者下的指令能透過driver去執行。 2. Connection:所謂的「通道」或「連線」,操作資料庫的關鍵,代表跟資料庫的連線通道。 3. ResultSet:對應到SQL中select指令的結果操作。 4. Statement家族: * Statement:藉由Connection方法來建立與取得Statement物件,執行靜態的SQL指令並與資料庫交談(Statement creatStatement() ### Statement vs. PreparedStatement 1. 效率:PreparedStatement的效率會比Statement好 ``` Statement statement = conn.createStatement(); PreparedStatement preStatement = conn.prepareStatement(sql); //執行的時候: ResultSet rSet = statement.executeQuery(sql); ResultSet pSet = preStatement.executeQuery(); ``` 在建立時,PreparedStatement有預編譯的過程,已經繫結sql,之後無論執行多少遍,都不會再去進行編譯;而 Statement不同,如果執行多次,則相應的就要編譯多少遍sql,所以從這點看,PreparedStatement 的效率會比Statement要高一些。 2. 安全:PreparedStatement比Statement安全 ## boolean execute() 1. 有更新就是false;沒更新就是true。 2. 可以理解成「詢問資料前後是否一致?」若僅查詢沒有更新,資料前後自然一致,就是true;若有更動(新刪修),資料前後不一致,就是false。 ## 交易ACID * A:原子性(Atomicity) <font color = red>關鍵:無法分割</font> 因為原子當時被當成最小單位,無法被分割(夸克表示:),用這個「無法分割」的特性來表達一個交易要內部所有步驟都成功,才能算交易成功;若其中一個步驟出包即失敗(有內鬼,終止交易)。 * C:一致性(Consistency) <font color = red>關鍵:質量守恆</font> 交易作用的資料集合在交易前後必須一致,若交易成功,整個資料庫集合會是交易後的狀態;反之則為交易前狀態。(質量守恆定律) 舉例:甲有1000元,乙有100元,若甲匯給乙500元,則交易成功後甲有500元,乙有600元;交易失敗的話雙方的錢不會有更動,故不會出現乙莫名變成600元,但甲毫無損失,或是甲短少500元,乙卻啥都沒拿到的情形。 可以用會計來思考這個特性。 * I:隔離行為(Isolation behavior) <font color = red>關鍵:你走你的陽關道,我過我的獨木橋</font> 在多執行續的情況下,每個人都能保有自己的交易,不會互相干擾。 * D:持續性(Durability) <font color = red>關鍵:永恆不變</font> 交易一旦成功,所有變更都會保存下來,就像是匯款後錢就拿不回來一樣,即便系統出問題(eg.發現匯錯帳戶),匯款結果也不會變更。 ## 批次更新