在你安裝相應(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ù)。
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
在使用驅(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)程序。
注冊(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);
}
你注冊(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);
}
當(dāng)你加載了驅(qū)動(dòng)程序之后,你可以通過(guò) DriverManager.getConnection() 方法建立一個(gè)連接。為方便參考,以下列出了三個(gè)加載 DriverManager.getConnection() 方法:
在這里,每個(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。
RDBMS | JDBC 驅(qū)動(dòng)程序名稱 | 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ù)庫(kù)實(shí)際情況進(jìn)行設(shè)置。
我們已經(jīng)列出了三種用 DriverManager.getConnection() 方法來(lái)創(chuàng)建一個(gè)連接對(duì)象。
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);
第二種 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);
第三種 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);
在 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)開心的事。
更多建議: