From Gossip@Openhome

Java Gossip: 連接資料庫

為了要連線MySQL資料庫,您必須要有MySQL JDBC驅動程式,請將下載的mysql-connector-java-*.jar加入至CLASSPATH中,這邊先以Java Class來示範如何連線MySQL,Java類別中與資料庫操作相關的類別都位於java.sql套件中。

要連線MySQL,必須經由幾個動作:
  • 載入與註冊JDBC驅動程式
透過java.lang.Class類別的forName()來載入並向DriverManager註冊JDBC驅動程式(驅動程式會自動透過DriverManager.registerDriver()方法註冊), MySQL的驅動程式類別是com.mysql.jdbc.Driver,您如下載入與註冊JDBC驅動程式:
try {
    Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e) {
    System.out.println("找不到驅動程式類別");
}
 
如果找不到com.mysql.jdbc.Driver類別,就會丟出 ClassNotFoundException,這時請確定您的CLASSPATH中是否包括了mysql-connector-java-*.jar的位置。

  • 提供JDBC URL
JDBC URL定義了連接資料庫時的協定、子協定、資料來源職別:
協定:子協定:資料來源識別

協定在JDBC中總是jdbc開始;子協定是橋接的驅動程式或是資料庫管理系統名稱,使用MySQL的話是 mysql;資料來源識別標出找出資料庫來源的位址;MySQL的JDBC URL撰寫方式如下:
jdbc:mysql://主機名稱:連接埠/資料庫名稱?參數1=值1&參數2=值2

主機名稱可以是本機localhost或是其它連線主機,連接埠為3306,假如我們要連線GUESTBOOK 資料庫,並指明使用者名稱與密碼,可以如下指定:
jdbc:mysql://localhost:3306/GUESTBOOK?user=caterpillar&password=123456

如果要使用中文存取的話,還必須給定參數userUnicodecharacterEncoding,表明是否使用Unicode,並指定字元編碼方式,例如:
jdbc:mysql://localhost:3306/GUESTBOOK?user=caterpillar&password=123456 &useUnicode=true&characterEncoding=Big5

中文的編碼方式除了Big5之外,還可以使用UTF8,這可以避免Big5中文字「許」、「功」、「蓋」等存入 MySQL所發生的問題。

  • 從DriverManager取得Connection
要連線資料庫,我們可以從DriverManager要求並取得Connection物件,它代表資料庫連線物件,您可以直接給它JDBC URL作為參數並取回Connection物件:
try {
    String url =  "jdbc:mysql://localhost:3306/GUESTBOOK?" +
                  "user=caterpillar&password=123456";
    Connection conn = DriverManager.getConnection(url);
    if(!conn.isClosed())
        System.out.println("資料庫連線成功");

    conn.close();
}
catch(SQLException e) {
    ....
}
 

取得Connection物件之後,您可以測試與資料庫的連線是否關閉,即使用isClosed(),在操作完資料庫之後,必須使用close()來關閉與資料庫的連線。

getConnection()方法也提供給定使用者名稱與密碼的方式來給定參數,例如:
String url = "jdbc:mysql://localhost:3306/GUESTBOOK";
String user = "caterpillar";
String password = "123456";
Connection conn = DriverManager.getConnection(url,
                                         user, password);
 

下面這個程式是用來測試與資料庫的連線是否成功的一個完整範例:

  • DBConnectionDemo.java
package onlyfun.caterpillar;

import java.sql.*;

public class DBConnectionDemo {
public static void main(String[] args) {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/GUESTBOOK";
String user = "caterpillar";
String password = "123456";
try {
Class.forName(driver);
Connection conn =
DriverManager.getConnection(url,
user, password);

if(conn != null && !conn.isClosed()) {
System.out.println("資料庫連線測試成功!");
conn.close();
}

}
catch(ClassNotFoundException e) {
System.out.println("找不到驅動程式類別");
e.printStackTrace();
}
catch(SQLException e) {
e.printStackTrace();
}
}
}