jdbc 連接數(shù)據(jù)庫(kù)步驟
建立一個(gè) jdbc 數(shù)據(jù)庫(kù)連接共有四個(gè)步驟:
- 導(dǎo)入 jdbc 包: 添加 import 語(yǔ)句到 java 程序?qū)胨璧念愒?java 代碼中。
- 注冊(cè) jdbc 驅(qū)動(dòng)程序:這一步會(huì)導(dǎo)致 jvm 加載所需的驅(qū)動(dòng)程序?qū)崿F(xiàn)到內(nèi)存中,因此它可以實(shí)現(xiàn) jdbc 請(qǐng)求。
- 制定數(shù)據(jù)庫(kù) url:這是創(chuàng)建格式正確的地址指向到要連接的數(shù)據(jù)庫(kù)。
- 創(chuàng)建連接對(duì)象:最后,代碼調(diào)用 drivermanager 對(duì)象的 getconnection() 方法來(lái)建立實(shí)際的數(shù)據(jù)庫(kù)連接。
1. 導(dǎo)入 jdbc 包
import 語(yǔ)句告訴java編譯器在哪里可以找到在代碼中引用,并放置在您的源代碼最開始的類。
使用標(biāo)準(zhǔn)的jdbc包,它允許選擇,插入,更新和sql表中刪除數(shù)據(jù),添加以下進(jìn)口到您的源代碼:
import java.sql.* ; // for standard jdbc programs import java.math.* ; // for bigdecimal and biginteger support
2. 注冊(cè) jdbc 驅(qū)動(dòng)程序
使用 jdbc 創(chuàng)建連接之前,必須在程序中注冊(cè)驅(qū)動(dòng)程序。注冊(cè)過(guò)程只能一次,可以通過(guò)以下兩種方式之一注冊(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àn)樗试S使驅(qū)動(dòng)注冊(cè)配置,便于攜帶。
下面的示例使用 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è)驅(qū)動(dòng)程序的方法是使用 static drivermanager.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); }
3. 制定數(shù)據(jù)庫(kù) url
當(dāng)加載驅(qū)動(dòng)程序完成后,可以使用 drivermanager.getconnection() 方法獲得連接。為方便參考,我們列出了三個(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ù)地址。
下表列出了常用 jdbc 驅(qū)動(dòng)程序名和數(shù)據(jù)庫(kù)的 url。
rdbms | jdbc驅(qū)動(dòng)程序的名稱 | url 格式 |
---|---|---|
mysql | com.mysql.jdbc.driver | jdbc:mysql://hostname:port/databasename |
oracle | oracle.jdbc.driver.oracledriver | jdbc:oracle:thin:@hostname:port:databasename |
db2 | com.ibm.db2.jdbc.net.db2driver | jdbc:db2:hostname:port/databasename |
sybase | com.sybase.jdbc.sybdriver | jdbc:sybase:tds:hostname:port/databasename |
3. 創(chuàng)建連接對(duì)象
1)使用數(shù)據(jù)庫(kù)url的用戶名和密碼:
getconnection() 最常用的形式是 getconnection(string url, string user, string password),要求傳遞數(shù)據(jù)庫(kù) url,用戶名 username和密碼 password。
假設(shè)有一臺(tái)主機(jī)tcp/ip地址 192.0.0.1 以及主機(jī)名和 oracle 監(jiān)聽器被配置為在端口 1521,數(shù)據(jù)庫(kù)名稱是 emp,然后完整的數(shù)據(jù)庫(kù) url 是:
jdbc:oracle:thin:@192.0.0.1:1521:emp
通過(guò) url、username 和 password 三個(gè)參數(shù)來(lái)獲得一個(gè) connection 對(duì)象:
string url = "jdbc:oracle:thin:@192.0.0.1:1521:emp"; string user = "username"; string pass = "password" connection conn = drivermanager.getconnection(url, user, pass);
2)只使用一個(gè)數(shù)據(jù)庫(kù) url 的調(diào)用方式
drivermanager.getconnection(string url);
通過(guò)一個(gè)參數(shù)來(lái)獲得一個(gè) connection 對(duì)象,在這種情況下,數(shù)據(jù)庫(kù)的 url 中包含用戶名和密碼:
jdbc:oracle:driver:username/password@database
所以上面的連接可以創(chuàng)建如下:
string url = "jdbc:oracle:thin:username/password@192.0.0.1:1521:emp"; connection conn = drivermanager.getconnection(url);
3)使用數(shù)據(jù)庫(kù) url 和 properties 對(duì)象的調(diào)用方式
drivermanager.getconnection(string url, properties info);
properties 對(duì)象用來(lái)保存一組鍵值對(duì),調(diào)用 getconnection() 方法時(shí),將鍵值對(duì)傳遞給驅(qū)動(dòng)程序。
import java.util.*; string url = "jdbc:oracle:thin:@192.0.0.1:1521:emp"; properties info = new properties( ); info.put( "user", "username" ); info.put( "password", "password" ); connection conn = drivermanager.getconnection(url, info);
4. 關(guān)閉 jdbc 連接
在jdbc程序的結(jié)束,需要關(guān)閉所有的數(shù)據(jù)庫(kù)連接,以結(jié)束數(shù)據(jù)庫(kù)會(huì)話。但是,如果不關(guān)閉的話,java 垃圾收集器會(huì)關(guān)閉連接,并清除舊對(duì)象。但依托垃圾收集,特別是在數(shù)據(jù)庫(kù)編程,是非常差的編程習(xí)慣,應(yīng)該顯式地關(guān)閉數(shù)據(jù)庫(kù)連接。為了確保連接被關(guān)閉,可以在代碼中的 finally 塊執(zhí)行。
要關(guān)閉上面打開的連接,應(yīng)該調(diào)用close()方法,如下所示:
conn.close();
顯式地關(guān)閉連接,可以節(jié)約系統(tǒng)資源。