このトピックでは、標準の Java Database Connectivity (JDBC) インターフェイスを使用して SQL で Lindorm ワイドテーブルアプリケーションを開発する方法について説明し、コード例を示します。
前提条件
JDK 1.8 以降のバージョンの Java 環境がインストールされている必要があります。
クライアントの IP アドレスが Lindorm のホワイトリストに追加されている必要があります。詳細については、「ホワイトリストの設定」をご参照ください。
制限事項
このトピックの操作は、ワイドテーブルモードの Lindorm にのみ適用されます。Lindorm Serverless はサポートされていません。
操作手順
以下の手順のコードスニペットを使用するか、完全なサンプルコードをダウンロードしてローカルでコンパイルおよび実行できます。このトピックのサンプルコードは、com.aliyun.lindorm.sql.demo.BasicDemo クラスにあります。
Lindorm クライアントをダウンロードします。Maven プロジェクトの場合は、pom.xml ファイルの
dependenciesセクションに次の依存関係を追加します。<dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>Lindorm クライアントを初期化し、Lindorm クライアントとデータの間の接続を確立します。
// LindormTable SQL のエンドポイント。 String url = "jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060"; // 接続パラメーターを設定します。 Properties properties = new Properties(); // Lindorm コンソールから取得したデータベースのユーザー名。 properties.put("user", "root"); // Lindorm コンソールから取得したデータベースのパスワード。 properties.put("password", "test"); // 接続を確立するときにデータベースを指定します。データベースを指定しない場合は、`default` が使用されます。 properties.put("database", "default"); // 接続を取得します。 Connection connection = DriverManager.getConnection(url, properties);重要サーバーリソースを管理するため、10 分間アイドル状態が続いた Lindorm クライアント接続はサーバーによって自動的に切断されます。この接続を再利用しようとすると、
com.aliyun.lindorm.client.shaded.org.apache.calcite.avatica.http.ConnectionDisconnectedExceptionエラーが発生します。この問題を解決するには、接続を再確立する必要があります。接続パラメーターは次のとおりです。
パラメーター
例
説明
url
jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060
Lindorm ワイドテーブルの SQL アドレス。エンドポイントを取得する方法については、「エンドポイントの表示」をご参照ください。
重要アプリケーションが ECS インスタンスにデプロイされている場合は、セキュリティの向上とネットワーク遅延の低減のために、VPC (Virtual Private Cloud) 経由で Lindorm インスタンスにアクセスします。
アプリケーションがローカルにデプロイされている場合は、パブリックネットワーク経由で Lindorm インスタンスに接続する前に、コンソールでパブリックエンドポイントを有効にする必要があります。これを行うには、コンソールで を選択します。Wide Table Engine タブで、Enable Public Endpoint をクリックします。
user
root
ユーザーパスワードを忘れた場合は、LindormTable のクラスター管理システムで変更できます。
password
test
database
default
接続するデータベースの名前。デフォルトでは、`default` データベースに接続されます。
接続が確立されたら、LindormTable SQL Java API を使用して Lindorm ワイドテーブルにアクセスします。次のコードに例を示します。
/* -------------- JDBC ベースの CRUD の例 ----------------- */ 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 = "upsert 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(); } // すべての書き込みバッチを実行します。 // パフォーマンスと安定性のために、バッチを追加しすぎないでください。 // 1 回の `executeBatch()` 呼び出しで最大数百のバッチを書き込みます。 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(); } // データを更新します。 // Lindorm SQL の UPDATE 文は単一行の更新のみをサポートし、一括更新はサポートしていません。 // これは、WHERE 句で完全なプライマリキーを指定する必要があることを意味します。 String updateSql = "update " + tableName + " set name = ? where id=?"; try (PreparedStatement ps = connection.prepareStatement(updateSql)) { ps.setString(1, "bb2update"); ps.setString(2, "aa2"); ps.executeUpdate(); } String querySql1 = "select * from " + tableName + " where id=?"; try (PreparedStatement ps = connection.prepareStatement(querySql1)) { ps.setString(1, "aa2"); ResultSet rs = ps.executeQuery(); System.out.println("--------- update-----------"); while (rs.next()) { String id = rs.getString(1); String name = rs.getString(2); System.out.println("id=" + id); System.out.println("name=" + name); } } // テーブルを削除します。 String dropTable = "drop table " + tableName; try (Statement stmt = connection.createStatement()) { stmt.execute(dropTable); } // 接続を閉じます。操作が完了したら、接続リークを防ぐために必ず接続を閉じてください。 connection.close();
一般的なフレームワークを使用した LindormTable へのアクセスの例
このセクションでは、さまざまな Java フレームワークを使用して LindormTable にアクセスするためのコード例を示します。
Druid フレームワークを使用して LindormTable にアクセスする方法については、「Druid アクセスの例」をご参照ください。
Spring フレームワークを使用して LindormTable にアクセスする方法については、「Spring アクセスの例」をご参照ください。
Mybatis フレームワークを使用して LindormTable SQL にアクセスする方法については、「Mybatis アクセスの例」をご参照ください。
Hibernate フレームワークを使用して LindormTable SQL にアクセスする方法については、「Hibernate アクセスの例」をご参照ください。
参考資料
LindormTable SQLの構文については、「SQL 構文マニュアル」をご参照ください。