このページでは、Spanner JDBC ドライバを使用して Spanner の基本オペレーションを実行する方法を説明します。
JDBC ドライバをインストールする
Spanner クライアント ライブラリの手順に従って認証を設定し、次のスニペットに示されているように、Spanner JDBC ドライバの依存関係を pom.xml
ファイルに追加します。
JDBC ドライバを読み込むために Java クラス名を必要とするフレームワークを使用している場合、クラス名は
com.google.cloud.spanner.jdbc.JdbcDriver
です。接続の設定方法については、
JdbcDriver の API ドキュメントをご覧ください。
Spanner データベースに接続する
JdbcDriver クラスの説明には、接続文字列の構文が示され、接続を作成してクエリを実行するためのサンプルコードが含まれています。
ドライバは、指定されたデータベースの SQL 言語(GoogleSQL または PostgreSQL)を自動的に検出します。言語パラメータは必須ではないか、許可されません。
エミュレータに接続する
エミュレータに接続するには、たとえば次のように SPANNER_EMULATOR_HOST
環境変数を設定します。
Linux / macOS
export SPANNER_EMULATOR_HOST=localhost:9010
Windows
set SPANNER_EMULATOR_HOST=localhost:9010
これにより、Spanner JDBC ドライバのドライバは、デフォルトの本番環境サービスではなく、localhost
で実行されているエミュレータに接続します。
Examples
以下のコードサンプルは、一般的なユースケースを対象としています。
スキーマ更新を行う
次のコード例では、最初に JDBC 接続を作成してからテーブルを作成し、Singers
テーブルをデータベースに追加します。
自動 commit モードでトランザクションを使用して行を追加する
複数のオペレーションをグループとして commit する必要がない場合は、トランザクションを autocommit モードで使用できます(デフォルトの動作)。次のコード例では、トランザクションを autocommit モードで使用して、Singers
テーブルに行を追加します。
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Types;
import java.util.Arrays;
import java.util.List;
class InsertDataExample {
// Class to contain singer sample data.
static class Singer {
final long singerId;
final String firstName;
final String lastName;
final BigDecimal revenues;
Singer(long singerId, String firstName, String lastName, BigDecimal revenues) {
this.singerId = singerId;
this.firstName = firstName;
this.lastName = lastName;
this.revenues = revenues;
}
}
static final List<Singer> SINGERS =
Arrays.asList(
new Singer(10, "Marc", "Richards", new BigDecimal("104100.00")),
new Singer(20, "Catalina", "Smith", new BigDecimal("9880.99")),
new Singer(30, "Alice", "Trentor", new BigDecimal("300183")),
new Singer(40, "Lea", "Martin", new BigDecimal("20118.12")),
new Singer(50, "David", "Lomond", new BigDecimal("311399.26")));
static void insertData() throws SQLException {
// TODO(developer): Replace these variables before running the sample.
String projectId = "my-project";
String instanceId = "my-instance";
String databaseId = "my-database";
insertData(projectId, instanceId, databaseId);
}
static void insertData(String projectId, String instanceId, String databaseId)
throws SQLException {
String connectionUrl =
String.format(
"jdbc:cloudspanner:/projects/%s/instances/%s/databases/%s",
projectId, instanceId, databaseId);
try (Connection connection = DriverManager.getConnection(connectionUrl)) {
try (PreparedStatement ps =
connection.prepareStatement(
"INSERT INTO Singers\n"
+ "(SingerId, FirstName, LastName, SingerInfo, Revenues)\n"
+ "VALUES\n"
+ "(?, ?, ?, ?, ?)")) {
for (Singer singer : SINGERS) {
ps.setLong(1, singer.singerId);
ps.setString(2, singer.firstName);
ps.setString(3, singer.lastName);
ps.setNull(4, Types.BINARY);
ps.setBigDecimal(5, singer.revenues);
ps.addBatch();
}
int[] updateCounts = ps.executeBatch();
System.out.printf("Insert counts: %s%n", Arrays.toString(updateCounts));
}
}
}
}
複数のオペレーションをグループとして commit する方法を制御する
Spanner で複数のオペレーションをグループとしてまとめて commit するかどうかを制御する場合、自動 commit モードを無効にできます。次のコード例では、connection.setAutoCommit(false)
と connection.commit()
を使用して Singers
テーブルに行を追加します。
SQL クエリを実行する
次のコード例では、Singers
テーブルのすべての行を、歌手の姓で並べ替えて返します。
次のステップ