【JDBC4.2】一、JDBC簡介

注意:本編文章以下代碼均爲簡寫方式,無法執行,僅供參考

1. JDBC的由來

直接使用socket協議訪問數據庫

應用程序可以直接通過多種方式訪問數據庫,最普通的是通過socket訪問數據庫。以Mysql 爲例:首先通過程序通過socket和數據庫建立了TCP連接,把準備執行的SQL語句或命令封裝成特定於Mysql 數據庫的應用層數據包,發送給Mysql 數據庫,Mysql數據庫執行命令,將結果封裝成數據包並返回給應用,應用程序進行解析,顯示結果給客戶端。如下圖所示:

這裏寫圖片描述


訪問數據庫的抽象層–JDBC

令人抓狂的是,Oracle, DB2,Postgresql等其他數據庫都有一套屬於自己的應用層訪問協議。 他們的網絡訪問協議和Mysql 的完全不一樣 ! 這就意味着之前寫的針對Mysql 的程序無法針對其他數據庫通用, 如果想切換數據庫, 每個程序都得另起爐竈寫一套代碼!直接使用socket訪問數據庫耦合度太高了,必須得有一個抽象層屏蔽這些細節!
爲此,JDK專門提供了一系列針對這個抽象層的統一接口—JDBC(Java Data Base Connectivity,java數據庫連接),稱爲JDBC規範。數據庫廠商需要實現JDBC規範中的某些接口(實現中應包含特定數據庫的應用層協議的轉換/解析等),這些接口統被稱爲 XX數據庫驅動 。如下圖所示
這裏寫圖片描述
數據庫廠商實現這些接口一般以單個的jar文件發佈,如:
mysql-connector-java-5.1.40.jar(Mysql)
ojdbc14.jar(Oracle)


2. JDBC的發展

參考我的另一篇文章 link


3.JDBC的一些接口

java.sql.Connection接口

JDBC規範中用Connection接口用來代表程序和數據庫的Socket連接。數據庫廠商必須實現這個接口。

使用java.sql.Driver

JDBC規範了一個抽象層吧: Driver接口。每個數據庫都需要實現Driver 接口, 通過Driver 可以獲得特定數據庫的Connection 。 這樣就避免了直接調用特定Connection的耦合性。

Driver driver=new com.abc.Driver();
//獲取DB連接
Connection connection = driver.connect("url","user","pwd");

工廠類java.sql.DriverManager

如果要訪問多個數據庫—JDBC提供了DriverManager類,使用它可以註冊不止一個Driver,方便獲取對應數據庫Connection。你可以這樣寫:

//註冊一個數據庫驅動/如果換用其他廠商的數據庫驅動,直接在這裏換其他Driver
DriverManager.registerDriver(new com.abc.Driver());
DriverManager.registerDriver(new com.ssss.Driver());
//獲取連接
Connection connection = DriverManager.getConnection("url","user","pwd");

Driver會根據url來調用註冊在DriverManager中的每個Driver相應方法,來判斷是否支持這個url,如果是則返回特定的Connection。

進一步簡化

在JDBC4.0以後,你可以這樣寫:

Connection connection = DriverManager.getConnection("url","user","pwd");

DriverManager會自動加載ClassPath中所有的Driver實現類,而每個Driver類被加載時,會自動註冊到DriverManager中(在靜態代碼塊static{}中實現註冊)。

4. 開發環境

JDK版本

版本1.8

IDE

InteliJ IDEA 2016

maven依賴

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>6.0.5</version>
</dependency>

數據庫信息

類型:mysql
版本: 5.7
IP: localhost
端口:3306
庫名:test
用戶名: root
密碼: 123456
表: student
表結構:

CREATE TABLE `student` (
  `name` varchar(5) NOT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

5. 參考文獻

1.JDBC™ 4.2 Specification : JSR 221(Lance Andersen, Specification Lead)March 2014

發佈了111 篇原創文章 · 獲贊 158 · 訪問量 37萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章