このトピックでは、Javaで提供されるJDBC APIを使用してSQLベースのLindormTableアプリケーションを開発する方法について説明し、例を示します。
前提条件
Java Development Kit(JDK) V1.8以降がインストールされている。
クライアントのIPアドレスがLindormインスタンスのホワイトリストに追加されている。 詳細については、「ホワイトリストを設定する」をご参照ください。
制限事項
このトピックで説明する手順は、Lindorm Serverlessには適用されません。
手順
以下の手順で提供されているサンプルコードを直接使用することも、lindorm-sql-demo.zip からサンプルコードをローカルコンピューターにダウンロードしてコンパイルおよび実行することもできます。 このトピックで提供されているサンプルコードは、com.aliyun.lindorm.sql.demo.BasicDemo クラスに含まれています。
Lindormクライアントをダウンロードします。 たとえば、Mavenプロジェクトの
pom.xmlファイルに次の依存関係を追加できます。次のコードは、Lindorm ワイドテーブルにアクセスするために LindormTable SQL の Java API 操作を呼び出す方法の例を示しています。<dependency> <groupId>com.aliyun.lindorm</groupId> <artifactId>lindorm-all-client</artifactId> <version>2.2.1.3</version> </dependency>Lindormクライアントを初期化し、Lindormクライアントとデータ間の接続を確立します。
// SQL を使用して LindormTable に接続して使用する場合に必要なエンドポイント。 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);重要Lindormクライアントとサーバー間の接続が 10 分以上アイドル状態の場合、サーバーはリソース使用率を向上させるために接続を閉じます。 接続が閉じられた後に接続を使用すると、
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
SQL を使用して Lindormtable に接続して使用する場合に必要なエンドポイント。 エンドポイントの取得方法の詳細については、「エンドポイントを表示する」をご参照ください。
重要アプリケーションが ECS インスタンスにデプロイされている場合は、セキュリティの向上とネットワークレイテンシの低減のために、VPC を使用して Lindorm インスタンスに接続することをお勧めします。
アプリケーションがローカルサーバーにデプロイされていて、インターネット経由で Lindorm インスタンスに接続する必要がある場合は、Lindorm コンソールでインスタンスのインターネットエンドポイントを有効にするために、次の手順を実行できます。左側のナビゲーションペインで、 を選択します。 ワイドテーブルエンジン タブで、パブリックエンドポイントを有効にする をクリックします。
user
root
パスワードを忘れた場合は、LindormTable のクラスター管理システムでパスワードを変更できます。
password
test
database
default
接続するデータベースの名前。 デフォルトでは、クライアントは default という名前のデータベースに接続されます。
接続が確立されたら、LindormTable SQL の Java API 操作を呼び出して、Lindorm ワイドテーブルにアクセスします。 次のコードは、Lindorm ワイドテーブルにアクセスするために LindormTable SQL の Java API 操作を呼び出す方法の例を示しています。
/* -------------- 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(); } // すべてのバッチで書き込み操作を実行します。 // アプリケーションのパフォーマンスと安定性を確保するために、多数のバッチで同時に書き込み操作を実行しないでください。 // 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 ステートメントは、一度に 1 行のデータのみを更新でき、バッチデータの更新はサポートしていません。 // したがって、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 に接続する場合は、「Mybatis ベースの接続のサンプルコード」を参照してください。
Hibernate を使用して LindormTable に接続する場合は、「Hibernate ベースの接続のサンプルコード」を参照してください。
参考資料
LindormTable でサポートされている SQL 構文の詳細については、「SQL リファレンス」をご参照ください。