jdbc解耦

1,注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)
2,獲取連接
3,獲取操作數(shù)據(jù)庫(kù)的預(yù)處理對(duì)象
4,執(zhí)行sql。得到結(jié)果集
5,遍歷結(jié)果集
6,釋放資源
存在問(wèn)題:耦合度過(guò)高,在第一步注冊(cè)驅(qū)動(dòng)時(shí),new了com.mysql.jdbc.Driver(),如果此時(shí)沒(méi)有對(duì)應(yīng)的mysql的jar包,則編譯期不通過(guò)。這并不是運(yùn)行期錯(cuò)誤。
實(shí)際開(kāi)發(fā)中,希望做到:編譯器不依賴(lài),運(yùn)行期才依賴(lài)。
解決思路:通過(guò)反射的方式解耦
第一步注冊(cè)驅(qū)動(dòng)代碼替換為 Class.forname("com.mysql.jdbc.Driver"); 這時(shí)的引號(hào)內(nèi)的內(nèi)容只是字符串,不再像之前一樣依賴(lài)于某個(gè)具體的驅(qū)動(dòng)類(lèi)。(但還是無(wú)法運(yùn)行,因?yàn)槿鄙賹?duì)應(yīng)的驅(qū)動(dòng)類(lèi)jar包)。雖然無(wú)法運(yùn)行,但此時(shí)會(huì)從編譯時(shí)錯(cuò)誤,變成運(yùn)行時(shí)的異常)

總結(jié)解耦思路:①使用反射來(lái)創(chuàng)建對(duì)象,避免使用new關(guān)鍵字

好處:從依賴(lài)某個(gè)具體的驅(qū)動(dòng)類(lèi),變成了只是依賴(lài)某個(gè)具體的字符串。
但這又帶來(lái)了新的問(wèn)題,代碼中寫(xiě)死了字符串,如果今后想換數(shù)據(jù)庫(kù)還是需要改。
解決辦法:②通過(guò)讀取配置文件,來(lái)獲取要?jiǎng)?chuàng)建的對(duì)象全限定類(lèi)名。即:通過(guò)配置文件把字符串配置進(jìn)去→讀取配置文件獲得要?jiǎng)?chuàng)建對(duì)象的全限定類(lèi)名→使用反射創(chuàng)建對(duì)象