JDBC 連接數(shù)據(jù)庫

2018-09-28 19:58 更新

連接數(shù)據(jù)庫

在你安裝相應的驅(qū)動程序后,就可以用 JDBC 建立一個數(shù)據(jù)庫連接。

編寫建立一個 JDBC 連接的程序是相當簡單的。下面是簡單的四個步驟-

  • 導入 JDBC 包:在你的 Java 代碼中,用 import 語句添加你所需的類。

  • 注冊 JDBC 驅(qū)動程序:這一步會導致 JVM 加載所需的驅(qū)動程序到內(nèi)存中執(zhí)行,因此它可以實現(xiàn)你的 JDBC 請求。

  • 數(shù)據(jù)庫 URL 制定:這是用來創(chuàng)建格式正確的地址指向你想要連接的數(shù)據(jù)庫。

  • 創(chuàng)建連接對象:最后,代碼調(diào)用 DriverManager 對象的 getConnection() 方法來建立實際的數(shù)據(jù)庫連接。

導入 JDBC 包

import 語句告訴 Java 編譯器在哪里可以找到你在代碼中引用的類,這些引用放置在你的源代碼起始位置。

使用標準的 JDBC 包,它允許你選擇,插入,更新和刪除 SQL 表中的數(shù)據(jù),添加以下引用到您的源代碼中-

import java.sql.* ;  // for standard JDBC programs
import java.math.* ; // for BigDecimal and BigInteger 

注冊 JDBC 驅(qū)動程序

在使用驅(qū)動程序之前,你必須在你的程序里面注冊它。通過加載 Oracle 驅(qū)動程序的類文件到內(nèi)存中來注冊驅(qū)動程序,因此它可以采用 JDBC 接口來實現(xiàn)。

你需要在你的程序里做一次注冊即可。你可以通過以下兩種方式來注冊一個驅(qū)動程序。

方法1 - Class.forName()

注冊一個驅(qū)動程序中最常用的方法是使用 Java 的Class.forName() 方法來動態(tài)加載驅(qū)動程序的類文件到內(nèi)存中,它會自動將其注冊。這種方法更優(yōu)越一些,因為它允許你對驅(qū)動程序的注冊信息進行配置,便于移植。

下面是使用 Class.forName() 來注冊 Oracle 驅(qū)動程序的示例:

try {
   Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

你可以使用 getInstance() 方法來解決不兼容的 JVM,但你必須編寫如下所示的兩個額外的異常-

try {
   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
catch(IllegalAccessException ex) {
   System.out.println("Error: access problem while loading!");
   System.exit(2);
catch(InstantiationException ex) {
   System.out.println("Error: unable to instantiate driver!");
   System.exit(3);
}

方法2 - DriverManager.registerDriver()

你注冊一個驅(qū)動程序的第二種方法是使用靜態(tài) staticDriverManager.registerDriver() 方法。

如果你使用的是不兼容 JVM 的非 JDK,比如微軟提供的,你必須使用 registerDriver() 方法。

下面是使用 registerDriver() 來注冊 Oracle 驅(qū)動程序的示例:

try {
   Driver myDriver = new oracle.jdbc.driver.OracleDriver();
   DriverManager.registerDriver( myDriver );
}
catch(ClassNotFoundException ex) {
   System.out.println("Error: unable to load driver class!");
   System.exit(1);
}

數(shù)據(jù)庫 URL 制定

當你加載了驅(qū)動程序之后,你可以通過 DriverManager.getConnection() 方法建立一個連接。為方便參考,以下列出了三個加載 DriverManager.getConnection() 方法:

  • getConnection(String url)
  • getConnection(String url, Properties prop)
  • getConnection(String url, String user, String password)

在這里,每個格式需要一個數(shù)據(jù)庫 URL ,數(shù)據(jù)庫 URL 是指向數(shù)據(jù)庫的地址。

在建立一個數(shù)據(jù)連接的時候,大多數(shù)會在配置一個數(shù)據(jù)庫 URL 時遇到問題。

下表列出了常用的 JDBC 驅(qū)動程序名和數(shù)據(jù)庫URL。

RDBMSJDBC 驅(qū)動程序名稱URL 格式
MySQLcom.mysql.jdbc.Driverjdbc:mysql://hostname/ databaseName
ORACLEoracle.jdbc.driver.OracleDriverjdbc:oracle:thin:@hostname:port Number:databaseName
DB2COM.ibm.db2.jdbc.net.DB2Driverjdbc:db2:hostname:port Number/databaseName
Sybasecom.sybase.jdbc.SybDriverjdbc:sybase:Tds:hostname: port Number/databaseName

URL 格式所有加粗的部分都是靜態(tài)的,你需要將剩余部分按照你的數(shù)據(jù)庫實際情況進行設置。

創(chuàng)建連接對象

我們已經(jīng)列出了三種用 DriverManager.getConnection() 方法來創(chuàng)建一個連接對象。

使用數(shù)據(jù)庫 URL 的用戶名和密碼

getConnection() 最常用的方式是需要你提供一個數(shù)據(jù)庫 URL,用戶名和密碼:

假設你使用的是 Oracle 的簡化驅(qū)動程序,你可以從 URL 獲得數(shù)據(jù)庫的主機名:端口:數(shù)據(jù)庫名稱的信息。

如果你有一臺名為 amrood 的主機,它的 TCP / IP 地址 192.0.0.1,你的 Oracle 監(jiān)聽器被配置為監(jiān)聽端口 1521,數(shù)據(jù)庫名稱是 EMP,然后完整的數(shù)據(jù)庫 URL 是-

jdbc:oracle:thin:@amrood:1521:EMP

現(xiàn)在,你必須調(diào)用適當?shù)挠脩裘兔艽a以及 getConnection() 方法來獲得一個 Connection 對象,如下所示:

String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);

只使用數(shù)據(jù)庫 URL

第二種 DriverManager.getConnection() 方法調(diào)用的方式只需要數(shù)據(jù)庫 URL 參數(shù)-

DriverManager.getConnection(String url);

然而,在這種情況下,數(shù)據(jù)庫的 URL ,包括用戶名和密碼,將表現(xiàn)為以下的格式-

jdbc:oracle:driver:username/password@database

所以上述連接對象可以如下所示創(chuàng)建連接-

String URL = "jdbc:oracle:thin:username/password@amrood:1521:EMP";
Connection conn = DriverManager.getConnection(URL);

使用數(shù)據(jù)庫 URL 和 Properties 對象

第三種 DriverManager.getConnection() 方法調(diào)用需要數(shù)據(jù)庫 URL 和 Properties 對象-

DriverManager.getConnection(String url, Properties info);

Properties 對象保存了一組關(guān)鍵數(shù)值。它通過調(diào)用 getConnection() 方法,將驅(qū)動程序?qū)傩詡鬟f給驅(qū)動程序。

使用下面的代碼可以建立與上述示例相同的連接-

import java.util.*;

String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
Properties info = new Properties( );
info.put( "user", "username" );
info.put( "password", "password" );

Connection conn = DriverManager.getConnection(URL, info);

關(guān)閉 JDBC 連接

在 JDBC 程序的末尾,它必須明確關(guān)閉所有的連接到數(shù)據(jù)庫的連接,以結(jié)束每個數(shù)據(jù)庫會話。但是,如果忘了,Java 垃圾收集器也會關(guān)閉連接,它會完全清除過期的對象。

依托垃圾收集器,特別是在數(shù)據(jù)庫編程,是非常差的編程習慣。你應該養(yǎng)成用 close()方法關(guān)閉連接對象的習慣。

為了確保連接被關(guān)閉,你可以在代碼中的 'finally' 程序塊中執(zhí)行。 無論異常是否發(fā)生,finally 程序是肯定會被執(zhí)行的。

要關(guān)閉上面打開的連接,你應該調(diào)用 close()方法,如下所示-

conn.close();

對你的數(shù)據(jù)庫管理員來說,明確的關(guān)閉連接到 DBMS 的連接,是相當開心的事。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號