安裝相應的驅動程式後,現在是時候來學習使用JDBC建立資料庫連線了。
建立JDBC連線所涉及的程式設計相當簡單。 以下是基本的四個步驟 -
import
語句在Java程式碼開頭位置匯入所需的類。DriverManager
物件的getConnection()
方法來建立實際的資料庫連線。import
語句告訴Java編譯器在哪裡找到在程式碼中參照的類,import
語句一般放置在原始碼的開頭。
要使用標準的JDBC包,它允許在資料庫表中執行選擇,插入,更新和刪除資料,請將以下匯入新增到原始碼中 -
import java.sql.* ; // for standard JDBC programs
import java.math.* ; // for BigDecimal and BigInteger support
在使用程式之前,必須先註冊該驅動程式。 註冊驅動程式是將Oracle驅動程式的類檔案載入到記憶體中的過程,因此可以將其用作JDBC介面的實現。
只需在程式中一次註冊就可以。可以通過兩種方式之一來註冊驅動程式。
註冊驅動程式最常見的方法是使用Java的Class.forName()
方法,將驅動程式的類檔案動態載入到記憶體中,並將其自動註冊。這個方法是推薦使用的方法,因為它使驅動程式註冊可組態和便攜。
以下範例使用Class.forName()
註冊Oracle驅動程式 -
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(ClassNotFoundException ex) {
System.out.println("Error: unable to load driver class!");
System.exit(1);
}
使用JDBC驅動程式連線MySQL資料庫的範例程式碼片段 -
Class.forName("com.mysql.jdbc.Driver");
Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/db_name","db_username", "db_password");
conn.close();
使用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);
}
第二種方法是使用靜態DriverManager.registerDriver()
方法來註冊驅動程式。
如果使用的是非JDK相容的JVM(如Microsoft提供的),則應使用registerDriver()
方法。
以下範例使用registerDriver()
註冊Oracle驅動程式 -
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);
}
載入驅動程式後,可以使用DriverManager.getConnection()
方法建立連線。 為了方便參考,這裡列出三個過載的DriverManager.getConnection()
方法 -
getConnection(String url)
getConnection(String url, Properties prop)
getConnection(String url, String user, String password)
這裡每個格式都需要一個資料庫URL。 資料庫URL是指向資料庫的地址。
制定資料庫URL是建立連線相關聯的大多數錯誤問題發生的地方。
下表列出了常用的JDBC驅動程式名稱和資料庫URL。
RDBMS | JDBC驅動程式名稱 | URL格式 |
---|---|---|
MySQL | com.mysql.jdbc.Driver |
jdbc:mysql://hostname/databaseName |
ORACLE | oracle.jdbc.driver.OracleDriver |
jdbc:oracle:thin:@hostname:portNumber:databaseName |
PostgreSQL | org.postgresql.Driver |
jdbc:postgresql://hostname:port/dbname |
DB2 | com.ibm.db2.jdbc.net.DB2Driver |
jdbc:db2:hostname:port Number/databaseName |
Sybase | com.sybase.jdbc.SybDriver |
jdbc:sybase:Tds:hostname: portNumber/databaseName |
URL格式的所有突出部分都是靜態的,只需要根據資料庫設定更改對應的部分。
上面列出了三種形式的DriverManager.getConnection()
方法來建立一個連線物件。
getConnection()
最常用的形式要求傳遞資料庫URL,使用者名和密碼:
假設使用Oracle thin驅動程式,那麼需要為URL的資料庫部分指定:host:port:databaseName
值。
如果主機名為amrood的TCP/IP地址為192.0.0.10,並且Oracle偵聽器組態為偵聽埠1521
,並且要連線的資料庫名稱是EMP
,則完整的資料庫URL將是 -
jdbc:oracle:thin:@amrood:1521:EMP
// 或者
jdbc:oracle:thin:@192.0.0.10:1521:EMP
現在必須使用適當的使用者名和密碼呼叫getConnection()
方法獲取一個Connection
物件,如下所示:
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
// String URL = "jdbc:oracle:thin:@192.0.0.10:1521:EMP";
String USER = "username";
String PASS = "password"
Connection conn = DriverManager.getConnection(URL, USER, PASS);
DriverManager.getConnection()
方法的第二種形式只需要資料庫URL -
DriverManager.getConnection(String url);
但是,在本範例中,資料庫URL包括使用者名和密碼,並具有以下一般形式 -
jdbc:oracle:driver:username/password@database
所以,上述連線可以使用如下方式建立 -
String URL = "jdbc:oracle:thin:username/[email protected]:1521:EMP";
Connection conn = DriverManager.getConnection(URL);
DriverManager.getConnection()
方法的第三種形式需要一個資料庫URL和一個Properties
物件 -
DriverManager.getConnection(String url, Properties info);
Properties
物件包含一組鍵-值對。 在呼叫getConnection()
方法時,它用於將驅動程式屬性傳遞給驅動程式。
要進行與上述範例相同的連線,請使用以下程式碼 -
import java.util.*;
String URL = "jdbc:oracle:thin:@amrood:1521:EMP";
Properties info = new Properties( );
info.put( "user", "root" );
info.put( "password", "password12321" );
Connection conn = DriverManager.getConnection(URL, info);
在JDBC程式結束之後,顯式地需要關閉與資料庫的所有連線以結束每個資料庫對談。 但是,如果在編寫程式中忘記了關閉也沒有關係,Java的垃圾收集器將在清除過時的物件時也會關閉這些連線。
依靠垃圾收集,特別是資料庫程式設計,是一個非常差的程式設計實踐。所以應該要使用與連線物件關聯的close()
方法關閉連線。
要確保連線已關閉,可以將關閉連線的程式碼中編寫在「finally
」塊中。 一個finally
塊總是會被執行,不管是否發生異常。
要關閉上面開啟的連線,應該呼叫close()
方法如下 -
conn.close();
顯式關閉連線可節省資料庫系統的資源。為了更好的理解,建議您學習的JDBC範例程式碼教學。
參考Oracle+JDBC範例程式碼:
package com.yiibai;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
public class OracleJDBCExample {
public static void main(String[] argv) {
System.out.println("-------- Oracle JDBC Connection Testing ------");
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
} catch (ClassNotFoundException e) {
System.out.println("Where is your Oracle JDBC Driver?");
e.printStackTrace();
return;
}
System.out.println("Oracle JDBC Driver Registered!");
Connection connection = null;
try {
connection = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:xe", "system", "password");
} catch (SQLException e) {
System.out.println("Connection Failed! Check output console");
e.printStackTrace();
return;
}
if (connection != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
}
}