本文說明如何使用 Spanner JDBC 驅動程式,將 Java 應用程式連線至 Spanner Omni,並執行 SQL 陳述式。
Java Database Connectivity (JDBC) 是一種標準 Java API,可讓應用程式以一致的方式與關聯式資料庫互動。Spanner JDBC 驅動程式與 Spanner Omni 的運作方式,與 Spanner 相同。
使用 JDBC 驅動程式時,您可以搭配 Spanner Omni 運用標準 JDBC 相容工具和程式庫。
Spanner Omni JDBC 連線支援純文字、TLS、TLS (含憑證) 和 mTLS。
詳情請參閱 Spanner 說明文件中的「開始使用 JDBC 中的 Spanner」。
事前準備
如要搭配 JDBC 驅動程式使用 Spanner Omni,請使用 Spanner JDBC 驅動程式 2.41.0 以上版本。
如果您使用 Maven 而不使用物料清單 (BOM),請將下列指令新增至 pom.xml 檔案依附元件:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-spanner-jdbc</artifactId>
<version>2.41.0</version>
</dependency>
連結網址注意事項
由於 Spanner Omni 並未直接連線至Google Cloud 專案,因此 JDBC 連線網址中不需要 projects/name 元件。同樣地,由於每個 Spanner Omni 部署作業都有單一的現有執行個體 (instances/default),因此 instances/name 元件為選用項目。
如要將 JDBC 驅動程式連線至 Spanner Omni,而非 Spanner,請將 ;type=omni 屬性附加至連線網址。
建立 Spanner Omni 連線
下列範例說明如何使用 Spanner JDBC 驅動程式,為每個支援的安全設定建立與 Spanner Omni 的連線:
純文字
如要建立純文字連線,請使用類似下列的連線網址:
String url = "jdbc:spanner://HOST_ADDRESS:PORT/databases/DATABASE_ID;usePlainText=true;type=omni";
try (java.sql.Connection connection = DriverManager.getConnection(url)) {
try (ResultSet rs = connection.createStatement().executeQuery("SELECT * FROM Singers")) {
while (rs.next()) {
System.out.print(rs.getLong(1) + "\t");
System.out.println(rs.getString(2));
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
TLS
如要建立 TLS 連線,請將 CA 憑證新增至 Java 信任儲存庫,或在執行應用程式時指定自訂信任儲存庫,詳情請參閱「設定 Java 信任儲存庫」。JDBC 網址不需要任何額外的驗證參數:
String url = "jdbc:spanner://HOST_ADDRESS:PORT/databases/DATABASE_ID;type=omni";
使用認證資訊進行 TLS 驗證
如要透過使用者名稱和密碼驗證建立 TLS 連線,請按照「設定 Java Truststore」一文所述,將 CA 憑證新增至 Java Truststore,並在 JDBC 網址中指定 username 和 password 屬性:
String url = "jdbc:spanner://HOST_ADDRESS:PORT/databases/DATABASE_ID;type=omni;username=USERNAME;password=PASSWORD";
mTLS
如要建立 mTLS 連線,請按照「設定 Java Truststore」一文所述,將 CA 憑證新增至 Java Truststore,並在 JDBC 網址中指定 clientCertificate 和 clientKey 參數。用戶端私密金鑰必須採用符合 Java 規範的 PKCS#8 格式,如 Java SDK mTLS 指示所述:
String url = "jdbc:spanner://HOST_ADDRESS:PORT/databases/DATABASE_ID;type=omni;clientCertificate=PATH_TO_CLIENT_CERT;clientKey=PATH_TO_CLIENT_KEY";