JDBC獲取數(shù)據(jù)庫(kù)連接由淺入深
添加MySQL驅(qū)動(dòng):
不同的數(shù)據(jù)庫(kù)廠商都會(huì)有自己的實(shí)現(xiàn)java.sql.Driver接口的驅(qū)動(dòng)程序,例如mysql的實(shí)現(xiàn)就是com.mysql.jdbc.Driver,將mysql-connector-java-版本號(hào)-bin.jar添加到相應(yīng)工程的目錄(如果是動(dòng)態(tài)web項(xiàng)目的話,需要將對(duì)應(yīng)的jar包放到WebRoot目錄下)下面,右鍵選擇add as library就完成了(如果是使用的eclipse,則是點(diǎn)擊build path)。
在mysql8.0之后驅(qū)動(dòng)程序的全路徑應(yīng)該是com.mysql.cj.jdbc.Driver,使用原來(lái)的路徑也可以正確運(yùn)行,只是運(yùn)行時(shí)會(huì)在終端輸出一段推薦使用新路徑的紅色文字
獲取連接:
Driver
獲取連接之前。首先需要?jiǎng)?chuàng)建驅(qū)動(dòng)類(lèi)的對(duì)象,通過(guò)驅(qū)動(dòng)類(lèi)的connect()方法即可獲取數(shù)據(jù)庫(kù)連接。connect()方法的參數(shù)如下所示:
Connection connect(String url, java.util.Properties info)
其中url是用來(lái)標(biāo)識(shí)一個(gè)驅(qū)動(dòng)程序,而驅(qū)動(dòng)程序管理器就是通過(guò)url來(lái)選擇正確的驅(qū)動(dòng)程序。url的格式為:jdbc:子協(xié)議:子名稱(chēng)。
jdbc是JDBC url中的協(xié)議,而且在JDBC中協(xié)議恒為jdbc
子協(xié)議:用于標(biāo)識(shí)一個(gè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序,MySQL就是mysql。
子名稱(chēng):同來(lái)標(biāo)識(shí)數(shù)據(jù)庫(kù),格式為 主機(jī)名:端口號(hào)/數(shù)據(jù)庫(kù)名
例:jdbc:mysql://localhost:3306/databasename
Properties類(lèi)型的info則是用來(lái)提供數(shù)據(jù)庫(kù)的用戶名(user)和密碼(password)
綜上所述,我們可以將獲取連接分為四步,分別是:
實(shí)例化Driver類(lèi)
提供url
通過(guò)Properties提供用戶名和密碼
調(diào)用Driver類(lèi)的connect()方法獲取連接
具體實(shí)現(xiàn)代碼為:
@Test
public void testConnection(){
try {
//提供驅(qū)動(dòng)接口類(lèi)的實(shí)現(xiàn)對(duì)象
Driver driver = null;
driver = new com.mysql.cj.jdbc.Driver();
//url,指明具體要操作的數(shù)據(jù)
String url = "jdbc:mysql://localhost:3306/test";
//指明用戶名和密碼
Properties pros = new Properties();
pros.setProperty("user", "root");
pros.setProperty("password", "root");
//通過(guò)Driver中的connect()方法獲取連接
Connection connect = driver.connect(url, pros);
System.out.println(connect);
} catch (SQLException e) {
e.printStackTrace();
}
}
使用以上的代碼有一個(gè)缺點(diǎn)就是在代碼中使用了第三方的API,我們可以通過(guò)反射的方式來(lái)創(chuàng)建驅(qū)動(dòng)類(lèi)的對(duì)象,改進(jìn)后的代碼為:
@Test
public void testConnection(){
try {
//實(shí)例化Driver
String className = "com.mysql.cj.jdbc.Driver";
Class cls = Class.forName(className);
Driver driver = (Driver)cls.newInstance();
//url,指明具體要操作的數(shù)據(jù)
String url = "jdbc:mysql://localhost:3306/test";
//指明用戶名和密碼
Properties pros = new Properties();
pros.setProperty("user", "root");
pros.setProperty("password", "root");
//通過(guò)Driver中的connect()方法獲取連接
Connection connect = driver.connect(url, pros);
System.out.println(connect);
} catch (SQLException e) {
e.printStackTrace();
}
}
DriverManager
通過(guò)DriverManager的getConnection()方法來(lái)獲取連接,首先看一下該方法的參數(shù)詳情:
public static Connection getConnection(String url,String user, String password)
通過(guò)該方法的三個(gè)參數(shù)再加上驅(qū)動(dòng)的具體路徑,我們可以得知通過(guò)這種方法獲取數(shù)據(jù)庫(kù)連接的四個(gè)要素分別為:
url
用戶名
密碼
驅(qū)動(dòng)路徑
所以現(xiàn)在獲取連接的步驟應(yīng)該為:
給明獲取數(shù)據(jù)庫(kù)連接的四要素
實(shí)例化Driver
注冊(cè)驅(qū)動(dòng)
獲取連接
具體代碼為:
@Test
public void testConnection(){
try {
//給出數(shù)據(jù)庫(kù)連接的四個(gè)基本要素
String url = "jdbc:mysql://127.0.0.1:3306/test";
String driverName = "com.mysql.cj.jdbc.Driver";
String user = "root";
String password = "root";
//實(shí)例化Driver
Class cls = Class.forName(driverName);
Driver driver = (Driver)cls.newInstance();
//注冊(cè)驅(qū)動(dòng)
DriverManager.registerDriver(driver);
//獲取連接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
} catch (Exception e) {
e.printStackTrace();
}
}
但是以上的方式任然可以簡(jiǎn)化,我們先來(lái)看com.mysql.cj.jdbc.Driver的具體實(shí)現(xiàn):
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
public Driver() throws SQLException {
}
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
}
可以看到在Driver類(lèi)中有一個(gè)靜態(tài)代碼塊中有注冊(cè)驅(qū)動(dòng)的那一步,所以在實(shí)例化Driver類(lèi)的時(shí)候同時(shí)就將驅(qū)動(dòng)注冊(cè)了,所以以上代碼中注冊(cè)驅(qū)動(dòng)的代碼可以刪掉。
通過(guò)配置文件配合DriverManager獲取連接
我們可以將獲取數(shù)據(jù)庫(kù)連接的四大要素寫(xiě)在配置文件中,首先創(chuàng)建配置文件jdbc.properties,其中內(nèi)容為:
user=root password=root url=jdbc:mysql://localhost:3306/test driverName=com.mysql.cj.jdbc.Driver
通過(guò)讀取配置文件中的信息獲得四要素,從而獲取連接,最終版的代碼為:
@Test
public void testConnection5(){
try {
//加載配置文件
//最終版配合配置文件使用
Properties pros = new Properties();
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
pros.load(is);
//讀取配置信息
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverName = pros.getProperty("driverName");
//加載驅(qū)動(dòng)
Class.forName(driverName);
//獲取連接
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
} catch (Exception e) {
e.printStackTrace();
}
}
通過(guò)這種方式獲取數(shù)據(jù)庫(kù)的連接時(shí),如果需要修改用戶名密碼,驅(qū)動(dòng)類(lèi)或者操作的數(shù)據(jù)庫(kù)時(shí)就不再需要修改代碼,只需要修改配置文件中的各項(xiàng)的值即可實(shí)現(xiàn)更改。
到此這篇關(guān)于JDBC獲取數(shù)據(jù)庫(kù)連接由淺入深的文章就介紹到這了,更多相關(guān)JDBC獲取數(shù)據(jù)庫(kù)連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問(wèn)題
- JDBC連接SQL?Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查的全過(guò)程
- Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程
- Data Source與數(shù)據(jù)庫(kù)連接池簡(jiǎn)介(JDBC簡(jiǎn)介)
- 詳解JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式
- JDBC獲取數(shù)據(jù)庫(kù)連接的5種方式實(shí)例
- 如何使用JDBC連接數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句
相關(guān)文章
Java基于Swing實(shí)現(xiàn)的打獵射擊游戲代碼
這篇文章主要介紹了Java基于Swing實(shí)現(xiàn)的打獵射擊游戲代碼,包含完整的游戲事件處理與邏輯流程控制,具有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11
Java查找不重復(fù)無(wú)序數(shù)組中是否存在兩個(gè)數(shù)字的和為某個(gè)值
今天小編就為大家分享一篇關(guān)于Java查找不重復(fù)無(wú)序數(shù)組中是否存在兩個(gè)數(shù)字的和為某個(gè)值,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01
淺談spring中用到的設(shè)計(jì)模式及應(yīng)用場(chǎng)景
下面小編就為大家?guī)?lái)一篇淺談spring中用到的設(shè)計(jì)模式及應(yīng)用場(chǎng)景。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-08-08
解決@CachePut設(shè)置的key值無(wú)法與@CacheValue的值匹配問(wèn)題
這篇文章主要介紹了解決@CachePut設(shè)置的key的值無(wú)法與@CacheValue的值匹配問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程
這篇文章主要介紹了IDEA+Maven搭建Spring環(huán)境的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
Java設(shè)計(jì)模式之橋接模式實(shí)例詳解
這篇文章主要介紹了Java設(shè)計(jì)模式之橋接模式,結(jié)合實(shí)例形式詳細(xì)分析了橋接模式的概念、功能、Java實(shí)現(xiàn)方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09

