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

Lindorm:JDBC ドライバーを使用して LindormSearch に接続し、SQL リクエストを送信する

最終更新日:Jan 14, 2025

Java Database Connectivity(JDBC)ドライバーを使用して、Lindorm が提供する検索エンジンサービス(LindormSearch)に SQL リクエストを送信できます。このトピックでは、Lindorm が提供する Solr JDBC ドライバーを使用して LindormSearch にアクセスする方法について説明します。

前提条件

  • Lindorm インスタンスで LindormSearch がアクティブ化されていること。詳細については、LindormSearch のアクティブ化をご参照ください。
  • LindormSearch クライアントの IP アドレスが Lindorm インスタンスの許可リストに追加されていること。詳細については、ホワイトリストの設定をご参照ください。
  • Lindorm インスタンスの LindormSearch クラスターの SQL エンドポイントが取得されていること。詳細については、エンドポイントの表示をご参照ください。

Maven 依存関係の追加

Java アプリケーションの pom.xml ファイルに次の依存関係を追加します。

<dependency> 
  <groupId>com.aliyun.lindorm</groupId>  
  <artifactId>lindorm-all-client</artifactId>
  <version>2.1.2</version>
</dependency>

コレクションの作成

Lindorm コンソールの [クラスター管理] ページでコレクションを作成できます。詳細については、コレクションの管理をご参照ください。

サンプルコード

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

public class SearchSqlDemo {
    public static void main(String[] args) {
        Connection pconn = null;
        Statement stmt = null;
        try {
            // LindormSearch ドライバーを読み込みます。
            Class.forName("com.aliyun.lindorm.search.client.Driver");

            // Lindorm インスタンスの LindormSearch クラスターの SQL エンドポイントを指定します。
            String url = "jdbc:lindorm:search:url=http://ld-xxxx:30070";

            Properties props = new Properties();
            props.put("user", "testuser");
            props.put("password", "password");

            // 接続を確立します。
            pconn = DriverManager.getConnection(url, props);

            // ステートメントオブジェクトを作成します。
            stmt = pconn.createStatement();
            // テーブルを作成します。
            stmt.execute("create table if not exists test(c1 int, c2 varchar, primary key(c1))");

            // 1 行のデータを書き込みます。
            stmt.execute("upsert into test(c1,c2) values(1,'Shenzhen')");
            stmt.execute("upsert into test(c1,c2) values(2,'Shanghai')");

            // 複数行のデータを書き込みます。
            stmt.execute("upsert into test(c1,c2) values(3,'Beijing'),(4,'Guangzhou'),(5,'Hangzhou')");

            // データをクエリします。
            ResultSet rs = stmt.executeQuery("select * from test order by c1 ");
            System.out.println("#####before delete:");
            while (rs.next()) {
                System.out.println("c1=" + rs.getInt("c1") + ",c2=" + rs.getString("c2"));
            }

            // レコードを削除します。
            stmt.execute("delete from test where c1 >3");

            // データをクエリします。
            rs = stmt.executeQuery("select * from test order by c1 ");
            System.out.println("#####after delete:");
            while (rs.next()) {
                System.out.println("c1=" + rs.getInt("c1") + ",c2=" + rs.getString("c2"));
            }

            // テーブルを削除します。
            stmt.execute("drop table if exists test");
        } catch (Throwable e) {
            e.printStackTrace();
        } finally {
            // ステートメントと接続を閉じます。
            // 接続プールを使用して接続を管理することをお勧めします。このようにすることで、操作ごとに接続を確立し、操作完了後に接続を閉じる必要がなくなります。これは、クエリのパフォーマンス向上に役立ちます。
            try {
                if (stmt != null) {
                    stmt.close();
                }
                if (pconn != null) {
                    pconn.close();
                }
            } catch (Throwable e) {
                e.printStackTrace();
            }
        }
    }
}