Java Database Connectivity (JDBC) は、データベースに接続・管理し、SQL 文を実行するための標準的な Java API です。Java JDBC API を使用して LindormTable に接続し、Lindorm SQL を用いたアプリケーションを開発できます。本トピックでは、MySQL プロトコル上で Java JDBC API を使用してアプリケーションを開発する方法について説明します。
前提条件
ご利用のインスタンスで MySQL 互換機能が有効になっている必要があります。詳細については、「MySQL 互換機能の有効化」をご参照ください。
Java 環境がインストールされている必要があります。JDK 1.8 以降が必要です。
クライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されている必要があります。詳細については、「ホワイトリストの設定」をご参照ください。
操作手順
MySQL JDBC ドライバーの依存関係を追加します。Maven プロジェクトの場合、
pom.xmlファイルのdependenciesセクションに以下の依存関係を追加します。例:<dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.3.0</version> </dependency>重要LindormTable に接続する際は、MySQL JDBC ドライバーのバージョン 8.0 以降を使用することを推奨します。
Java で MySQL JDBC 接続を作成するには、MySQL JDBC ドライバーの JAR ファイル (
mysql-connector-java-x.x.x.jar) を手動で CLASSPATH に追加する必要があります。追加しない場合、接続は失敗します。
MySQL JDBC クライアントを初期化し、クライアントと LindormTable データとの間で接続を確立します。
Class.forName("com.mysql.cj.jdbc.Driver"); // Lindorm コンソールから取得したデータベースのユーザー名。 String username = "root"; // Lindorm コンソールから取得したデータベースのパスワード。 String password = "root"; // 接続先のデータベースを指定します。省略した場合はデフォルトデータベースが使用されます。 String database = "default"; // MySQL 用の LindormTable エンドポイント。ポート 33060 は MySQL 用に固定されており、変更できません。database を接続先のデータベース名に置き換えてください。パフォーマンス向上のため、その他のパラメーターは変更しないでください。 String url = "jdbc:mysql://ld-uf6k8yqb741t3****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com:33060/" + database + "?sslMode=disabled&allowPublicKeyRetrieval=true&useServerPrepStmts=true&useLocalSessionState=true&rewriteBatchedStatements=true&cachePrepStmts=true&prepStmtCacheSize=100&prepStmtCacheSqlLimit=50000000"; Properties properties = new Properties(); properties.put("user", username); properties.put("password", password); // 接続を取得します。 Connection connection = DriverManager.getConnection(url, properties);パラメーター
パラメーター
説明
url
MySQL 上で LindormTable に接続するための JDBC URL です。フォーマット:
jdbc:mysql://<MySQL 互換エンドポイント>/<データベース名>?<接続設定>。データベース名を指定しない場合、クライアントはデフォルトデータベースに接続します。MySQL 互換エンドポイントの取得方法については、「エンドポイントの確認」をご参照ください。
接続設定はパフォーマンスを向上させます。すべての設定を指定してください。 詳細については、「接続設定」をご参照ください。
重要アプリケーションが ECS インスタンス上で動作している場合、セキュリティを高めネットワーク遅延を低減するために、VPC 経由で Lindorm インスタンスにアクセスしてください。
アプリケーションがローカルマシン上で動作しており、インターネット経由で Lindorm インスタンスにアクセスする必要がある場合、Lindorm コンソールでパブリックエンドポイントを有効にしてください。詳細については、「LindormTable のエンドポイントの確認」をご参照ください。
VPC 経由で接続する場合は、url に MySQL 互換の VPC アドレスを指定してください。パブリックネットワーク経由で接続する場合は、url に MySQL 互換の Internet アドレスを指定してください。
database
接続先のデータベース名です。デフォルトでは、クライアントはデフォルトデータベースに接続します。
username
LindormTable に接続するためのユーザー名およびパスワードです。
パスワードを忘れた場合は、LindormTable クラスター管理システムで変更してください。詳細については、「ユーザーのパスワード変更」をご参照ください。
password
接続設定
パラメーター
例となる値
説明
sslMode
disabled
JDBC ドライバーが SSL を使用して暗号化された接続を確立するかどうかを指定します。
disabledに設定することを推奨します。disabledに設定することで、SSL を使用した暗号化接続を回避し、パフォーマンスを向上させます。allowPublicKeyRetrieval
true
認証中にサーバーから RSA 公開鍵を取得するかどうかを指定します。
trueに設定してください。useServerPrepStmts
true
サーバー側のプリペアドステートメントを使用するかどうかを指定します。
trueに設定することで、データベースが組み込みの SQL 前処理機能を使用し、パフォーマンスを向上させるとともに SQL インジェクションのリスクを軽減します。useLocalSessionState
true
ローカルセッション状態を使用してデータベースサーバーへの往復通信を削減するかどうかを指定します。
trueに設定してください。rewriteBatchedStatements
true
バッチ文を再書き込みするかどうかを指定します。
trueに設定することで、バッチパラメーター結合を使用するアプリケーションの書き込みパフォーマンスを大幅に向上させます。cachePrepStmts
true
プリペアドステートメントをキャッシュするかどうかを指定します。
trueに設定することで、頻繁に実行される文の作成オーバーヘッドを削減し、パフォーマンスを向上させます。prepStmtCacheSize
100
JDBC ドライバーがキャッシュするプリペアドステートメントの数です。この設定は cachePrepStmts が
trueに設定されている場合にのみ有効です。説明prepStmtCacheSize を大きくすると、より多くのメモリを消費します。実際のニーズに基づいてこの値を設定してください。ワークロードが高性能を要求する場合は、この値を増やしてください。
prepStmtCacheSqlLimit
500000
キャッシュ可能なプリペアドステートメントの最大長を指定します。この長さを超える SQL 文はキャッシュされません。ビジネスがパフォーマンスに敏感な場合は、このパラメーターの値を増やすことを推奨します。
接続確立後、LindormTable SQL 構文を使用します。例:
String tableName = "sql_table_" + new Random().nextInt(1000); // テーブルを作成します。 try (Statement statement = connection.createStatement()) { String sql = "create table if not exists " + tableName + "(id VARCHAR, name VARCHAR, primary key(id))"; int ret = statement.executeUpdate(sql); System.out.println(ret); } // データを挿入します。 String upsertSql = "insert into " + tableName + "(id,name) values(?,?)"; try (PreparedStatement ps = connection.prepareStatement(upsertSql)) { int batchSize = 100; for (int i = 0; i < batchSize; i++) { ps.setString(1, "aa" + i); ps.setString(2, "bb" + i); // バッチに追加します。 ps.addBatch(); } int[] ret = ps.executeBatch(); System.out.println(Arrays.toString(ret)); } // データをクエリします。 String querySql = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(querySql)) { ps.setString(1, "aa1"); ResultSet rs = ps.executeQuery(); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } // データを削除します。 String deleteSql = "delete from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(deleteSql)) { ps.setString(1, "aa1"); ps.executeUpdate(); } // 接続を閉じます。リソースリークを防ぐため、操作完了後は必ず接続を閉じてください。 connection.close();LindormTable SQL 構文の詳細については、「SQL リファレンス」をご参照ください。
説明Lindorm SQL では、
INSERTはUPSERTと同じセマンティクスを持ちます。MySQL JDBC クライアントがINSERTを最適化するため、データ書き込みにはINSERTを使用してください。バッチ書き込みは、単一行書き込みと比較して RPC 呼び出しを削減します。サーバーは行をバッチで処理し、より高いスループットを実現します。ただし、1 バッチあたりの行数が多すぎると、メモリ不足 (OOM) エラーやフル GC (Full GC) が発生し、サービスの安定性に影響を与える可能性があります。バッチサイズを制御してください。batchSize は 1 バッチあたりの行数です。50 ~ 100 の範囲で設定してください。
書き込み同時実行数を増やすことで、書き込みスループットを向上させることができます。