すべてのプロダクト
Search
ドキュメントセンター

Lindorm:Java JDBC API を使用したアプリケーション開発

最終更新日:Feb 11, 2026

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 インスタンスのホワイトリストに追加されている必要があります。詳細については、「ホワイトリストの設定」をご参照ください。

操作手順

  1. 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 に追加する必要があります。追加しない場合、接続は失敗します。

  2. 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 ドライバーがキャッシュするプリペアドステートメントの数です。この設定は cachePrepStmtstrue に設定されている場合にのみ有効です。

    説明

    prepStmtCacheSize を大きくすると、より多くのメモリを消費します。実際のニーズに基づいてこの値を設定してください。ワークロードが高性能を要求する場合は、この値を増やしてください。

    prepStmtCacheSqlLimit

    500000

    キャッシュ可能なプリペアドステートメントの最大長を指定します。この長さを超える SQL 文はキャッシュされません。ビジネスがパフォーマンスに敏感な場合は、このパラメーターの値を増やすことを推奨します。

  3. 接続確立後、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 では、INSERTUPSERT と同じセマンティクスを持ちます。MySQL JDBC クライアントが INSERT を最適化するため、データ書き込みには INSERT を使用してください。

    • バッチ書き込みは、単一行書き込みと比較して RPC 呼び出しを削減します。サーバーは行をバッチで処理し、より高いスループットを実現します。ただし、1 バッチあたりの行数が多すぎると、メモリ不足 (OOM) エラーやフル GC (Full GC) が発生し、サービスの安定性に影響を与える可能性があります。バッチサイズを制御してください。batchSize は 1 バッチあたりの行数です。50 ~ 100 の範囲で設定してください。

    • 書き込み同時実行数を増やすことで、書き込みスループットを向上させることができます。