1 JDBC簡介
對於現代的開發幾乎所有的項目都是圍繞着數據庫展開的,你很少會見到沒有數據庫而單獨存在的項目。
所以任何一門的編程語言如果要想發展,那麼必須對數據庫的開發有所支持,同樣,Java從最初的時代開始就一直支持着數據庫的開發標準——JDBC(Java Database Connectivity),Java數據庫連接),JDBC本質上來講並不屬於一個技術,它屬於一種服務。而所有服務的特徵:必須按照指定的套路來進行操作。
在Java裏面專門爲JDBC提供有一個模塊(java.sql),裏面核心的一個開發包就是java.sql,在JDBC裏面核心的組成就是DriverManager類以及若干接口(Connection、Statement、PreparedStatement、ResultSet)。
對於JDBC的程序數據庫訪問也分爲如下的四種形式:
(1)JDBC-ODBC橋連接:利用微軟的ODBC技術進行數據庫連接,而後在利用JDBC技術訪問ODBC技術進行數據庫的開發,這種技術爲Java默認支持的技術,不需要做任何的額外配置即可實現;
|——處理流程:程序→JDBC→ODBC→數據庫,性能很擦汗,不會有人用。
(2)JDBC連接:直接利用JDBC進行數據庫的連接處理;
|——處理流程:程序→JDBC→數據庫,這種連接一般只連接本地數據庫服務器。
(3)JDBC網絡連接:通過特定的網絡協議連接指定的數據庫服務;
|——處理流程:程序→JDBC→網絡數據庫(IP地址和端口號);
(4)JDBC協議連接:自己通過編寫指定的協議操作實現數據庫的訪問;
2 連接Oracle數據庫
在本次將基於Oracle數據庫來實現JDBC的編程實現,那麼在這樣的情況下請一定要保證已經成功地啓動了Oracle數據庫的兩個重要服務:數據監聽服務(Listener)、實例服務(SID)。
由於本次將直接利用JDBC進行Oracle數據庫的連接,所以必須保證你的系統之中已經配置了Oracle的驅動程序。
(1)情況一:如果你現在使用記事本進行程序編寫,則需要將其手工配置到CLASSPATH之中;
(2)情況二:基於Eclipse開發,所以需要在JavaBuilderPath上配置此驅動程序。
如果現在要連接Oracle數據庫,則必須採用如下的步驟進行處理:
(1)通過反射機制將加載數據庫驅動程序類:oracle.jdbc.driver.OracleDriver
;
(2)數據庫連接需要有一個網絡的連接地址,該地址結構如下:
|——地址結構:jdbc:oracle:thin:@hostname:port:SID
;
|——LK數據庫:jdbc:oracle:thin:@localhost:60:lk
;
(3)數據庫的用戶名:scott
;
(4)數據庫密碼:******
;
對於數據庫的連接提供有java.sql.DriverManager的程序類,利用此類中的方法可以獲取一個Connection接口對象。
(1)獲取Connection接口對象:public static Connection getConnection(String url, String user, String password) throws SQLException
範例:實現具體的數據庫連接操作
package org.lks.demo;
import java.sql.Connection;
import java.sql.DriverManager;
public class OracleJDBCDemo {
private static final String DATABASE_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DATABASE_URL = "jdbc:oracle:thin:@localhost:60:lk";
private static final String DATABASE_USER = "scott";
private static final String DATABASE_PASSWORD = "scott";
public static void main(String[] args) throws Exception{
Connection conn = null; //每一個Connection接口對象描述的就是一個用戶連接
Class.forName(DATABASE_DRIVER); //向容器之中加載數據庫驅動程序
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
System.out.println(conn);
conn.close(); //數據庫的連接資源有限一定要關閉
}
}
如果此時在輸出Connection接口對象的時候並沒有產生任何的異常,那麼就表示當前的Oracle已經可以正常的連接了。
但是這個時候肯定都在思考一個問題:爲什麼要連接Oracle數據庫的時候一定要單獨配置Oracle數據庫的驅動程序呢?首先要知道,JDBC是一個操作的標準,既然是一個標準,那麼就證明裏面是不牽扯到具體實現類的,有數據庫廠商來實現,下面將以上連接的連接過程通過類圖的關係來進行描述。
通過結構可以發現,整個的JDBC設計實現的就是一個工廠類的處理機制。DriverManager是一個工廠,不同的數據庫生產商利用JDBC提供的標準實現各自的數據庫處理操作。
3 連接MySQL數據庫
如果現在要連接MySQL數據庫,則必須採用如下的步驟進行處理:
(1)通過反射機制將加載數據庫驅動程序類:com.mysql.cj.jdbc.Driver
;
(2)數據庫連接需要有一個網絡的連接地址,該地址結構如下:
|——地址結構:jdbc:mysql://hostname:port/databasename?useSSL=false&serverTimezone=UTC
;
|——mysql數據庫:jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC
;
(3)數據庫的用戶名:root
;
(4)數據庫密碼:******
;
對於數據庫的連接提供有java.sql.DriverManager的程序類,利用此類中的方法可以獲取一個Connection接口對象。
範例:實現具體的數據庫連接操作
package org.lks.demo;
import java.sql.Connection;
import java.sql.DriverManager;
public class MySQLJDBCDemo {
private static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DATABASE_URL = "jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC";
private static final String DATABASE_USER = "root";
private static final String DATABASE_PASSWORD = "****";
public static void main(String[] args) throws Exception{
Connection conn = null;
Class.forName(DATABASE_DRIVER);
conn = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
System.out.println(conn);
conn.close();
}
}
// MySQL 8.0 以下版本 - JDBC 驅動名及數據庫 URL
static final String DATABASE_DRIVER = "com.mysql.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost:3306/RUNOOB";
// MySQL 8.0 以上版本 - JDBC 驅動名及數據庫 URL
static final String DATABASE_DRIVER = "com.mysql.cj.jdbc.Driver";
static final String DATABASE_URL = "jdbc:mysql://localhost:3306/RUNOOB?useSSL=false&serverTimezone=UTC";
筆者MySQL數據庫版本爲8.0.19