JDBC獲取數(shù)據(jù)庫連接的5種方式實(shí)例
方式一:直接通過數(shù)據(jù)庫廠商提供的相關(guān)驅(qū)動
步驟
- 導(dǎo)入相關(guān)驅(qū)動(Build Path)
- 創(chuàng)建Driver類的實(shí)例化對象
- 獲取要連接數(shù)據(jù)庫的URL
- 創(chuàng)建Properties類的實(shí)例化對象,將賬號和密碼封裝到該對象中
- 通過Driver實(shí)例化對象調(diào)用connect(String url,Properties info)方法獲取connection對象
package connection; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; import java.util.Properties; import org.junit.jupiter.api.Test; public class ConnectionTest { @Test public void test() throws SQLException { //創(chuàng)建Driver實(shí)例 Driver driver=new com.mysql.cj.jdbc.Driver(); //獲取要讀取數(shù)據(jù)庫的URL String url="jdbc:mysql://localhost:3306/test04_emp"; //將賬號密碼封裝到Properties對象中 Properties info=new Properties(); info.setProperty("user", "root"); info.setProperty("password", "abc123"); //通過Driver的對象獲取連接 Connection connect=driver.connect(url, info); //調(diào)用連接的toString() System.out.println(connect); } }
方法二:通過反射的方式來構(gòu)造Driver對象
- 通過Class的forName(Stirng className)獲取驅(qū)動的運(yùn)行時(shí)類。
- 通過運(yùn)行時(shí)類的newInstance()來獲取運(yùn)行時(shí)類的對象。
- 獲取URL和將賬號密碼封裝到Properties對象中。
- 使用運(yùn)行時(shí)類的對象調(diào)用connect()方法獲取連接。
@Test public void test2() throws Exception { //通過反射的方式獲取運(yùn)行時(shí)類 Class clazz=Class.forName("com.mysql.cj.jdbc.Driver"); //通過反射的方式創(chuàng)建運(yùn)行時(shí)類對象 Driver driver=(Driver)clazz.newInstance(); //獲取URL String url="jdbc:mysql://localhost:3306/test04_emp"; //封裝賬號密碼 Properties info=new Properties(); info.setProperty("user", "root"); info.setProperty("password", "abc123"); //獲取連接 Connection connect=driver.connect(url, info); System.out.println(connect); }
方式三:使用DriverManager來替換Driver獲取連接
- 獲取Driver的實(shí)現(xiàn)類對象。
- 使用DriverManager的registerDriver(Driver driver)方法來注冊驅(qū)動。
- 提供URL、賬號和密碼。
- 使用DriverManager的getConnection(String url,String user,String password)來獲取連接。
@Test public void test3() throws Exception { //通過反射的方式獲取Driver對象 Driver driver=(Driver)Class.forName("com.mysql.cj.jdbc.Driver").newInstance(); //調(diào)用DriverManager的registerDriver(Driver driver)方法注冊驅(qū)動 DriverManager.registerDriver(driver); //提供賬號、密碼和URL String user="root"; String password="abc123"; String url="jdbc:mysql://localhost:3306/test04_emp"; //調(diào)用DriverManager的getConnection()方法來獲取連接 Connection connect=DriverManager.getConnection(url,user,password); System.out.println(connect); /*getConnection()還有一種版本:getConnection(String url,Properties info) * 可以參考方法一和方法二。 */ }
方法四:省略創(chuàng)建Driver對象和注冊驅(qū)動
- 通過反射將Driver類加載到內(nèi)存中。
- 提供賬號、密碼和URL。
- 通過DriverManager調(diào)用getConnection()獲取連接。
注意:這里之所以可以省略創(chuàng)建Driver對象和注冊驅(qū)動是因?yàn)?,?chuàng)建Driver對象的目的是給DriverManager調(diào)用registerDriver()注冊驅(qū)動時(shí)提供參數(shù),而在Driver類加載到內(nèi)存中時(shí),有一個(gè)static方法會自動調(diào)用registerDriver()方法,從而自動注冊驅(qū)動。
@Test public void test4() throws Exception { //通過反射將Driver加載到內(nèi)存中 Class.forName("com.mysql.cj.jdbc.Driver"); //提供相關(guān)信息 String user="root"; String password="abc123"; String url="jdbc:mysql://localhost:3306/test04_emp"; //通過getConnection()獲取連接 Connection connect=DriverManager.getConnection(url,user,password); System.out.println(connect); }
方式五:通過配置文件的方式
- 創(chuàng)建配置文件
- 通過類的加載器生成指向配置文件的流
- 創(chuàng)建Properties對象,通過調(diào)用load()方法將配置文件加載到內(nèi)存中
- 通過Properti對象的getProperty(String key)獲取相關(guān)信息
- 通過反射的方式加載驅(qū)動
- 調(diào)用getConnection()獲取連接
@Test public void test5() throws Exception { //通過類加載器創(chuàng)建一個(gè)指向配置文件的流 InputStream input=ConnectionTest.class.getClassLoader().getResourceAsStream("test.properties"); //創(chuàng)建Properties對象 Properties infoProperties=new Properties(); //以流為參數(shù)調(diào)用load()加載配置文件 infoProperties.load(input); //獲取相關(guān)信息 String driver=infoProperties.getProperty("driver"); String url=infoProperties.getProperty("url"); String user=infoProperties.getProperty("user"); String password=infoProperties.getProperty("password"); //加載驅(qū)動 Class.forName(driver); //獲取連接 Connection connection= DriverManager.getConnection(url, user, password); System.out.println(connection); }
我們通常都使用方式五
每種方式迭代的原因
第一種方式是直接通過使用指定數(shù)據(jù)庫廠商的驅(qū)動來獲取數(shù)據(jù)庫連接的,但是我們希望程序具有更好的可移植性,所以采用反射的方式來獲取驅(qū)動,這就產(chǎn)生了第二種方法;在開發(fā)中,我們通常都不使用Driver來獲取連接,而是通過使用DriverManager來獲得數(shù)據(jù)庫連接,這就從第二種方式到了第三種方式;又因?yàn)镈river的實(shí)現(xiàn)類中有靜態(tài)方法調(diào)用了regiesterDriver()方法,所以在通過反射的方式將類加載到內(nèi)存中時(shí),會自動注冊驅(qū)動,我們可以將注冊驅(qū)動的過程省略,這就產(chǎn)生了第四種方法;在前面的方法中,我們都是直接把賬號密碼和URL以及驅(qū)動的名稱直接寫在程序中的額,這不太符合我們?nèi)粘5囊?guī)范,也在一定程度上增加了程序的 風(fēng)險(xiǎn),為此我們將相關(guān)信息保存在配置文件中,在程序中通過讀取配置文件的方式來獲取相關(guān)的信息,這就產(chǎn)生了最后一種也是我們最常用的方式。
方式五的優(yōu)點(diǎn)
- 將需要的數(shù)據(jù)放到配置文件中,實(shí)現(xiàn)了數(shù)據(jù)和代碼分離,減少了耦合性。
- 如果需要修改配置文件信息,只需要替換文件就可以,避免了重新打包文件。
總結(jié)
到此這篇關(guān)于JDBC獲取數(shù)據(jù)庫連接的5種方式的文章就介紹到這了,更多相關(guān)JDBC數(shù)據(jù)庫連接內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Java使用Pipeline對Redis批量讀寫(hmset&hgetall)
本篇文章主要介紹了Java使用Pipeline對Redis批量讀寫(hmset&hgetall),具有一定的參考價(jià)值,有興趣的可以了解一下。2016-12-12Java?8函數(shù)式接口之BinaryOperator使用示例詳解
這篇文章主要大家介紹了Java?8函數(shù)式接口之BinaryOperator,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07Spring @Valid @Validated實(shí)現(xiàn)驗(yàn)證
這篇文章主要介紹了Spring @Valid @Validated實(shí)現(xiàn)驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01IDEA運(yùn)行SpringBoot項(xiàng)目的詳細(xì)步驟(圖文教程)
本文主要介紹了IDEA運(yùn)行SpringBoot項(xiàng)目的詳細(xì)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07