使用 JDBC 驅動程式連線到 Oracle 資料庫
1. 概述
Oracle 資料庫是最受歡迎的關聯式資料庫之一。在本教程中,我們將學習如何使用 JDBC 驅動程式連接到 Oracle 資料庫。
2. 資料庫
為了讓我們開始,我們需要一個資料庫。如果我們無法存取該映像,我們可以從Oracle 資料庫軟體下載下載並安裝免費版本,或使用Oracle 資料庫容器映像中找到的 Docker 映像之一。
在本文中,我們將建置並執行Oracle Database 23ai (23.5.0)
的 docker 映像。
3.Maven設定
現在我們已經有了一個資料庫,讓我們將 Oracle 的 JDBC 驅動程式所需的依賴項新增到我們的專案中。我們將使用 ojdbc11 連接到 Oracle 23ai:
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc11</artifactId>
<version>23.5.0.24.07</version>
</dependency>
最新版本的 ojdbc11 可以在Central Maven Repository中找到。此相依性需要 Java 11 或更高版本,並且是更新版本的 Java 的建議驅動程式。
4. 連接Oracle資料庫
為了連接到資料庫,我們建立一個OracleDataSource
,它是DataSource
介面的 Oracle 實作。這比使用DriverManager
更可取,因為DataSource
更具可擴展性且更易於設定。
首先,我們初始化連線屬性並在OracleDataSource
中設定屬性和 URL。之後,我們將呼叫getConnection()
來檢索新連線:
public static Connection getConnection(String databaseUrl, String userName, String password) throws SQLException {
var connectionProperties = new Properties();
connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_USER_NAME, userName);
connectionProperties.setProperty(OracleConnection.CONNECTION_PROPERTY_PASSWORD, password);
var oracleDataSource = new OracleDataSource();
oracleDataSource.setConnectionProperties(connectionProperties);
oracleDataSource.setURL(databaseUrl);
return oracleDataSource.getConnection();
}
還應該注意的是, OracleDataSource
有setUser()
和setPassword(),
可以使用它們來取代setConnectionProperties()
。但是,值得注意的是, OracleConnection
靜態提供了許多屬性名稱,這就是我們設定其他屬性(例如自動提交、快取或取得大小)的方式。
為了測試我們的getConnection()
方法,讓我們檢索使用者名稱:
@Test
void whenConnectionRetrieved_thenUserNameIsReturned() throws SQLException {
var url = "jdbc:oracle:thin:@//localhost:1521/FREEPDB1";
var userName = "BAELDUNG";
var password = "baeldung_pw";
String retrievedUser = null;
try (var connection = ConnectToOracleDb.getConnection(url, userName, password)) {
retrievedUser = connection.getMetaData().getUserName();
}
assertEquals(userName, retrievedUser);
}
此範例在 try-with-resources 區塊中建立連接,完成後自動關閉連線。
如果 URL、使用者名稱或密碼出現任何錯誤,我們會看到 ORA 錯誤。例如,ORA-17868 表示未知主機,ORA-01017 表示憑證錯誤。
5. 使用連接池優化效能
優化效能時需要考慮很多事情。 特別是,如果您正在設定 Web 應用程序,請考慮使用連線池。
連接池是可重複使用的資料庫連線的快取。
Oracle 為 Java 11+ 及更高版本和 Java 8 提供了通用連接池 (ucp11)。池。
六、結論
正如我們現在所知,檢索與資料庫的連接並不需要太多努力。
本文中使用的程式碼範例可在 GitHub 上取得。