詳解JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式
一、JDBC概念
Java DataBase Connectivity(Java數(shù)據(jù)庫(kù)連接技術(shù)) 它是將Java與SQL結(jié)合且獨(dú)立于特定的數(shù)據(jù)庫(kù)系統(tǒng)的應(yīng)用程序編程接口(API-它是一種可用于執(zhí)行SQL語(yǔ)句的JavaAPI,即由一組用Java語(yǔ)言編寫的類與接口所組成)
JDBC的設(shè)計(jì)目的:
它是一種規(guī)范,設(shè)計(jì)出來(lái)的主要目的是為了讓各個(gè)數(shù)據(jù)庫(kù)開發(fā)商為Java程序員提供標(biāo)準(zhǔn)的數(shù)據(jù)訪問類和接口,使得獨(dú)立于DBMS的Java應(yīng)用程序的開發(fā)成為可能(數(shù)據(jù)庫(kù)改變,驅(qū)動(dòng)程序跟著改變,但是應(yīng)用程序不變) Java設(shè)計(jì)規(guī)范接口,各大數(shù)據(jù)庫(kù)產(chǎn)商遵守規(guī)范實(shí)現(xiàn),Java程序員不需要考慮實(shí)現(xiàn)細(xì)節(jié),只需要調(diào)用API即可
JDBC工作的基本流程:
一個(gè)基本的JDBC工作流程,分為以下幾步:
1、加載特定數(shù)據(jù)庫(kù)驅(qū)動(dòng)器實(shí)現(xiàn)類,并注冊(cè)驅(qū)動(dòng)器(Driver會(huì)注冊(cè)到DriverManager中)
2、根據(jù)特定的URL,返回可以接受此URL的數(shù)據(jù)庫(kù)驅(qū)動(dòng)對(duì)象Driver
3、使用數(shù)據(jù)庫(kù)驅(qū)動(dòng) Driver 創(chuàng)建數(shù)據(jù)庫(kù)連接Connection會(huì)話
4、使用 Connection對(duì)象創(chuàng)建 用于操作sql的Statement對(duì)象
5、statement對(duì)象 .執(zhí)行 sql語(yǔ)句,返回結(jié)果ResultSet 對(duì)象
6、處理ResultSet中的結(jié)果
7、關(guān)閉連接,釋放資源
二、JDBC獲取數(shù)據(jù)庫(kù)連接的5種方式
方式一
public class ConnectionTest {
@Test
public void testConnection1() throws SQLException {
//獲取Driver實(shí)現(xiàn)類對(duì)象
Driver driver = new com.mysql.jdbc.Driver();
//jdbc:mysql: 協(xié)議
//localhost ip地址
//3306 MySQL數(shù)據(jù)庫(kù)默認(rèn)端口號(hào)
//test 需要連接的數(shù)據(jù)庫(kù)名稱
String url = "jdbc:mysql://localhost:3306/test";
Properties info = new Properties();
//設(shè)置連接的用戶名和名稱,user和password是固定的寫法
info.setProperty("user","root");
info.setProperty("passwor","root");
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
}方式二
public class ConnectionTest {
@Test
public void testConnection2() throws Exception {
//1.使用反射獲取Driver實(shí)現(xiàn)類對(duì)象
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2.提供需要連接的數(shù)據(jù)庫(kù)
String url = "jdbc:mysql://localhost:3306/test";
//3.提供連接需要的用戶和密碼
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","lxq");
//獲取鏈接
Connection connect = driver.connect(url, info);
System.out.println(connect);
}
}方式二是方式一的迭代,與方式一相比沒有出現(xiàn)第三方的API,有較好的移植性
方式三
public class ConnectionTest {
@Test
public void testConnection3() throws Exception {
//1.使用反射獲取Driver實(shí)現(xiàn)類對(duì)象
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver) clazz.newInstance();
//2.提供需要連接的數(shù)據(jù)庫(kù)
String url = "jdbc:mysql://localhost:3306/test";
//3.提供連接需要的用戶和密碼
String user = "root";
String passwor = "root";
//4.注冊(cè)驅(qū)動(dòng)
DriverManager.registerDriver(driver);
//5.獲取連接
Connection connection = DriverManager.getConnection(url, user, passwor);
System.out.println(connection);
}
}使用DriverManager(驅(qū)動(dòng)管理器)替換Driver,DriverManager是jdk提供的一個(gè)類,用來(lái)完成獲取連接的操作
方式四
public class ConnectionTest {
@Test
public void testConnection4() throws Exception {
//1.提供連接所需信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String passwor = "root";
//2.使用反射加載驅(qū)動(dòng)
Class.forName("com.mysql.jdbc.Driver");
//3.獲取連接
Connection connection = DriverManager.getConnection(url, user, passwor);
System.out.println(connection);
}
}與方式三相比,方式四省略了如下代碼:
Driver driver = (Driver) clazz.newInstance(); DriverManager.registerDriver(driver);
理由是,在com.mysql.jdbc.Driver類中有如下所示的靜態(tài)代碼塊,使用Class.forName()加載這個(gè)驅(qū)動(dòng)時(shí)就會(huì)執(zhí)行這個(gè)靜態(tài)代碼塊,實(shí)現(xiàn)了注冊(cè)驅(qū)動(dòng)
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
方式五
public class ConnectionTest {
@Test
public void testConnection5() throws Exception {
//1.獲取連接所需信息
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties info = new Properties();
info.load(is);
String url = info.getProperty("url");
String user = info.getProperty("user");
String password = info.getProperty("passwor");
String driverClass = info.getProperty("driverClass");
//2.使用反射加載驅(qū)動(dòng)
Class.forName(driverClass);
//5.獲取連接
Connection connection = DriverManager.getConnection(url, user, passwor);
System.out.println(connection);
}
}其中配置文件jdbc.properties在src目錄下:
url=jdbc:mysql://localhost:3306/test user=root passwor=root; driverClass=com.mysql.jdbc.Driver
使用配置文件的好處:
1、實(shí)現(xiàn)代碼和數(shù)據(jù)的分離,如果需要修改配置信息,直接在配置文件中進(jìn)行修改,不需要深入代碼
2、如果修改配置信息,省去了重新編譯的過程=
到此這篇關(guān)于詳解JDBC的概念及獲取數(shù)據(jù)庫(kù)連接的5種方式的文章就介紹到這了,更多相關(guān)JDBC數(shù)據(jù)庫(kù)連接內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于Java中使用jdbc連接數(shù)據(jù)庫(kù)中文出現(xiàn)亂碼的問題
- JDBC連接SQL?Server數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查的全過程
- Java JDBC API介紹與實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接池流程
- Data Source與數(shù)據(jù)庫(kù)連接池簡(jiǎn)介(JDBC簡(jiǎn)介)
- JDBC獲取數(shù)據(jù)庫(kù)連接的5種方式實(shí)例
- JDBC獲取數(shù)據(jù)庫(kù)連接由淺入深
- 如何使用JDBC連接數(shù)據(jù)庫(kù)并執(zhí)行SQL語(yǔ)句
相關(guān)文章
如何設(shè)置springboot禁止日志輸出到控制臺(tái)
文章總結(jié):本文主要介紹了SpringBoot項(xiàng)目中使用SLF4J記錄日志時(shí),日志默認(rèn)輸出到控制臺(tái)的原因及解決方法,日志框架如Logback默認(rèn)會(huì)將日志輸出到控制臺(tái),可以通過`logback-spring.xml`配置文件或配置類來(lái)禁止日志輸出到控制臺(tái),并設(shè)置日志輸出級(jí)別2025-01-01
SpringBoot集成EasyExcel實(shí)現(xiàn)Excel導(dǎo)入的方法
這篇文章主要介紹了SpringBoot集成EasyExcel實(shí)現(xiàn)Excel導(dǎo)入的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Java Feign微服務(wù)接口調(diào)用方法詳細(xì)講解
現(xiàn)如今微服務(wù)架構(gòu)十分流行,而采用微服務(wù)構(gòu)建系統(tǒng)也會(huì)帶來(lái)更清晰的業(yè)務(wù)劃分和可擴(kuò)展性。java如果使用微服務(wù)就離不開springcloud,我這里是把服務(wù)注冊(cè)到nacos上,各個(gè)服務(wù)之間的調(diào)用使用feign2023-01-01
Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼
這篇文章主要介紹了Java實(shí)現(xiàn)堆排序(Heapsort)實(shí)例代碼,有需要的朋友可以參考一下2013-12-12
Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法
這篇文章主要介紹了Spring遠(yuǎn)程調(diào)用HttpClient/RestTemplate的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
Java實(shí)戰(zhàn)項(xiàng)目之斗地主和斗牛游戲的實(shí)現(xiàn)
讀萬(wàn)卷書不如行萬(wàn)里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)斗地主和一個(gè)斗牛游戲,大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11

