當您在應用程式伺服器外部使用 JDBC 時,DriverManager
類別會管理連線的建立。
向 DriverManager
指定要嘗試建立連線的 JDBC 驅動程式。最簡單的方法是在實作 java.sql.Driver
介面的類別上使用 Class.forName()
。使用 MySQL Connector/J,此類別的名稱為 com.mysql.cj.jdbc.Driver
。使用此方法,您可以使用外部組態檔來提供連線至資料庫時要使用的驅動程式類別名稱和驅動程式參數。
以下 Java 程式碼片段顯示您如何從應用程式的 main()
方法中註冊 MySQL Connector/J。如果測試此程式碼,請先閱讀第 4 章Connector/J 安裝中的安裝章節,以確保您已正確安裝連接器並設定 CLASSPATH
。此外,請確保 MySQL 已設定為接受外部 TCP/IP 連線。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
// Notice, do not import com.mysql.cj.jdbc.*
// or you will have problems!
public class LoadDriver {
public static void main(String[] args) {
try {
// The newInstance() call is a work around for some
// broken Java implementations
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
} catch (Exception ex) {
// handle the error
}
}
}
在驅動程式向 DriverManager
註冊後,您可以藉由呼叫 DriverManager.getConnection()
來取得連線至特定資料庫的 Connection
實例。
範例 7.1 Connector/J:從 DriverManager
取得連線
如果您尚未這麼做,請先檢閱上方第 7.1 節「使用 JDBC DriverManager
介面連線至 MySQL」中的部分,再使用以下範例。
此範例顯示您如何從 DriverManager
取得 Connection
實例。getConnection()
方法有幾種不同的簽章。請參閱 JDK 隨附的 API 文件,以取得有關如何使用它們的更具體資訊。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
Connection conn = null;
...
try {
conn =
DriverManager.getConnection("jdbc:mysql://127.0.0.1/test?" +
"user=minty&password=greatsqldb");
// Do something with the Connection
...
} catch (SQLException ex) {
// handle any errors
System.out.println("SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
一旦建立 Connection
後,它就可以用來建立 Statement
和 PreparedStatement
物件,以及擷取有關資料庫的中繼資料。這會在以下章節中說明。
當未指定連線的使用者時,Connector/J 驗證外掛程式的實作會預設使用執行應用程式的作業系統使用者的名稱,以透過 MySQL 伺服器進行驗證(使用 Kerberos 驗證外掛程式時除外;請參閱第 6.12.2 節「使用 Kerberos 連線」以取得詳細資訊)。
只有在滿足以下所有條件時,使用者名稱才被視為未指定
未使用
DriverManager.getConnection(String url, String user, String password)
方法。例如,未在連線 URL 或其他地方使用連線屬性
user
。未在連線 URL 的授權中提及使用者,如
jdbc:mysql://127.0.0.1:3306/test
或jdbc:mysql://@localhost:3306/test
。
請注意,如果 (1) 或 (2) 不成立,並且傳遞空字串,則使用者名稱會是空字串,且不被視為未指定。