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

2018-09-28 19:58 更新

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

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

編寫建立一個(gè) JDBC 連接的程序是相當(dāng)簡(jiǎn)單的。下面是簡(jiǎn)單的四個(gè)步驟-

  • 導(dǎo)入 JDBC 包:在你的 Java 代碼中,用 import 語(yǔ)句添加你所需的類。

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

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

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

導(dǎo)入 JDBC 包

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

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

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

注冊(cè) JDBC 驅(qū)動(dòng)程序

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

你需要在你的程序里做一次注冊(cè)即可。你可以通過(guò)以下兩種方式來(lái)注冊(cè)一個(gè)驅(qū)動(dòng)程序。

方法1 - Class.forName()

注冊(cè)一個(gè)驅(qū)動(dòng)程序中最常用的方法是使用 Java 的Class.forName() 方法來(lái)動(dòng)態(tài)加載驅(qū)動(dòng)程序的類文件到內(nèi)存中,它會(huì)自動(dòng)將其注冊(cè)。這種方法更優(yōu)越一些,因?yàn)樗试S你對(duì)驅(qū)動(dòng)程序的注冊(cè)信息進(jìn)行配置,便于移植。

下面是使用 Class.forName() 來(lái)注冊(cè) Oracle 驅(qū)動(dòng)程序的示例:

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

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

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()

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

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

下面是使用 registerDriver() 來(lái)注冊(cè) Oracle 驅(qū)動(dòng)程序的示例:

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ù)庫(kù) URL 制定

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

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

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

在建立一個(gè)數(shù)據(jù)連接的時(shí)候,大多數(shù)會(huì)在配置一個(gè)數(shù)據(jù)庫(kù) URL 時(shí)遇到問(wèn)題。

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

RDBMSJDBC 驅(qū)動(dòng)程序名稱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ù)庫(kù)實(shí)際情況進(jìn)行設(shè)置。

創(chuàng)建連接對(duì)象

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

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

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

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

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

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

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

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

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

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

DriverManager.getConnection(String url);

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

jdbc:oracle:driver:username/password@database

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

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

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

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

DriverManager.getConnection(String url, Properties info);

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

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

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ù)庫(kù)的連接,以結(jié)束每個(gè)數(shù)據(jù)庫(kù)會(huì)話。但是,如果忘了,Java 垃圾收集器也會(huì)關(guān)閉連接,它會(huì)完全清除過(guò)期的對(duì)象。

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

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

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

conn.close();

對(duì)你的數(shù)據(jù)庫(kù)管理員來(lái)說(shuō),明確的關(guān)閉連接到 DBMS 的連接,是相當(dāng)開心的事。

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)