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

在安裝了相應(yīng)的驅(qū)動程序之后,就可以使用JDBC建立數(shù)據(jù)庫連接了。

建立JDBC連接所涉及的編程非常簡單。這是這些簡單的四個步驟-

  • 導(dǎo)入 JDBC 包:在Java程序中添加語句 import,以在Java代碼中導(dǎo)入所需的類。

  • 注冊 JDBC 驅(qū)動程序: 此步驟使JVM將所需的驅(qū)動程序?qū)崿F(xiàn)加載到內(nèi)存中,從而可以滿足您的JDBC請求。

  • 數(shù)據(jù)庫 URL 配置: 這是為了創(chuàng)建一個格式正確的地址,該地址指向您要連接的數(shù)據(jù)庫。

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

導(dǎo)入JDBC包

Import 語句告訴 Java 編譯器在哪里可以找到代碼中引用的類,并且放在源代碼的開頭。

要使用標(biāo)準 JDBC 包(它允許您選擇、插入、更新和刪除 SQL 表中的數(shù)據(jù)) ,請將以下導(dǎo)入添加到源代碼中

import java.sql.* ;  // 用于標(biāo)準JDBC程序
import java.math.* ; // 獲得BigDecimal和BigInteger支持

注冊 JDBC 驅(qū)動

在使用驅(qū)動程序之前,必須在程序中注冊該驅(qū)動程序。注冊驅(qū)動程序是將 Oracle 驅(qū)動程序的類文件加載到內(nèi)存中的過程,因此可以將其用作 JDBC 接口的實現(xiàn)。

你只需要在你的程序中注冊一次。您可以通過以下兩種方式之一注冊驅(qū)動程序。

方法I - Class.forName()

注冊驅(qū)動程序的最常見方法是使用Java的 Class.forName() 方法,將驅(qū)動程序的類文件動態(tài)加載到內(nèi)存中,內(nèi)存會自動進行注冊。此方法是可取的,因為它使您可以使驅(qū)動程序注冊成為可配置和可移植的。

以下示例 Class.forName( ) 用于注冊O(shè)racle驅(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,但是隨后您必須編寫兩個額外的Exception的代碼,如下所示:

try {
   Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
}
catch(ClassNotFoundException ex) {
   System.out.println("錯誤:無法加載驅(qū)動程序類!");
   System.exit(1);
catch(IllegalAccessException ex) {
   System.out.println("錯誤:加載時出現(xiàn)訪問問題!");
   System.exit(2);
catch(InstantiationException ex) {
   System.out.println("錯誤:無法實例化驅(qū)動程序!");
   System.exit(3);
}

方法二- DriverManager.registerDriver()

您可以用來注冊驅(qū)動程序的第二種方法是使用靜態(tài)方法 DriverManager.registerDriver() 。

如果使用的是不兼容JDK的JVM(例如Microsoft提供的JVM),則應(yīng)使用 registerDriver() 方法。

以下示例用于registerDriver()注冊O(shè)racle驅(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ù)庫URL是與建立連接相關(guān)的大多數(shù)問題發(fā)生的地方。

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

數(shù)據(jù)庫JDBC驅(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)的,您只需要根據(jù)數(shù)據(jù)庫設(shè)置更改其余部分。

創(chuàng)建連接對象

我們列出了三種 DriverManager.getConnection() 創(chuàng)建連接對象的方法。

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

getConnection() 最常用的形式要求您傳遞數(shù)據(jù)庫URL,用戶名密碼

假設(shè)您正在使用Oracle的thin驅(qū)動程序,則將為URL的數(shù)據(jù)庫部分指定 host:port:databaseName 值。

如果您在TCP / IP地址192.0.0.1上擁有一個主機,其主機名為 amrood,并且您的Oracle監(jiān)聽器配置為在端口1521上,并且您的數(shù)據(jù)庫名稱為EMP,則完整的數(shù)據(jù)庫URL將為-

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

現(xiàn)在,您必須使用正確的用戶名和密碼來調(diào)用方法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( )方法的第二種形式僅需要數(shù)據(jù)庫URL-

DriverManager.getConnection(String url);

但是,在這種情況下,數(shù)據(jù)庫URL包含用戶名和密碼,并具有以下常規(guī)形式-

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和屬性對象

DriverManager.getConnection( )方法的第三種形式需要數(shù)據(jù)庫URL和Properties對象-

DriverManager.getConnection(String url, Properties info);

屬性對象包含一組關(guān)鍵字-值對。它用于在調(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)該養(yǎng)成始終使用與連接對象關(guān)聯(lián)的 close()方法,來關(guān)閉數(shù)據(jù)庫連接的習(xí)慣。

為了確保關(guān)閉連接,您可以在代碼中提供一個“ finally”塊。finally塊總是執(zhí)行,而不考慮的異常的發(fā)生與否。

要關(guān)閉上面打開的連接,您應(yīng)該按以下方式調(diào)用 close() 方法:

conn.close();

顯式關(guān)閉連接可以節(jié)省DBMS資源,這將使您的數(shù)據(jù)庫管理員滿意。

為了更好地理解,我們建議您學(xué)習(xí)JDBC-示例代碼教程

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清