在你安裝相應的驅(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ù)庫。
import 語句告訴 Java 編譯器在哪里可以找到你在代碼中引用的類,這些引用放置在你的源代碼起始位置。
使用標準的 JDBC 包,它允許你選擇,插入,更新和刪除 SQL 表中的數(shù)據(jù),添加以下引用到您的源代碼中-
import java.sql.* ; // for standard JDBC programs
import java.math.* ; // for BigDecimal and BigInteger
在使用驅(qū)動程序之前,你必須在你的程序里面注冊它。通過加載 Oracle 驅(qū)動程序的類文件到內(nèi)存中來注冊驅(qū)動程序,因此它可以采用 JDBC 接口來實現(xiàn)。
你需要在你的程序里做一次注冊即可。你可以通過以下兩種方式來注冊一個驅(qū)動程序。
注冊一個驅(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);
}
你注冊一個驅(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);
}
當你加載了驅(qū)動程序之后,你可以通過 DriverManager.getConnection() 方法建立一個連接。為方便參考,以下列出了三個加載 DriverManager.getConnection() 方法:
在這里,每個格式需要一個數(shù)據(jù)庫 URL ,數(shù)據(jù)庫 URL 是指向數(shù)據(jù)庫的地址。
在建立一個數(shù)據(jù)連接的時候,大多數(shù)會在配置一個數(shù)據(jù)庫 URL 時遇到問題。
下表列出了常用的 JDBC 驅(qū)動程序名和數(shù)據(jù)庫URL。
RDBMS | JDBC 驅(qū)動程序名稱 | URL 格式 |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://hostname/ databaseName |
ORACLE | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@hostname:port Number:databaseName |
DB2 | COM.ibm.db2.jdbc.net.DB2Driver | jdbc:db2:hostname:port Number/databaseName |
Sybase | com.sybase.jdbc.SybDriver | jdbc:sybase:Tds:hostname: port Number/databaseName |
URL 格式所有加粗的部分都是靜態(tài)的,你需要將剩余部分按照你的數(shù)據(jù)庫實際情況進行設置。
我們已經(jīng)列出了三種用 DriverManager.getConnection() 方法來創(chuàng)建一個連接對象。
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);
第二種 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);
第三種 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);
在 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 的連接,是相當開心的事。
更多建議: