LindormSearch は、Lindorm が提供する Solr JDBC ドライバーを通じて SQL アクセスをサポートしており、Java アプリケーションが標準的な JDBC インターフェイスを使用してテーブルの作成、データの書き込み・クエリ・削除を行うことができます。
前提条件
作業を開始する前に、以下の項目を確認してください。
Lindorm インスタンスで LindormSearch が有効になっていること。詳細については、「LindormSearch の有効化」をご参照ください。
ご利用のクライアントの IP アドレスが Lindorm インスタンスのホワイトリストに追加されていること。詳細については、「ホワイトリストの設定」をご参照ください。
LindormSearch クラスターの SQL エンドポイントです。詳細については、「エンドポイントの表示」をご参照ください。
Maven 依存関係の追加
プロジェクトの pom.xml ファイルに、次の依存関係を追加します。
<dependency>
<groupId>com.aliyun.lindorm</groupId>
<artifactId>lindorm-all-client</artifactId>
<version>2.1.2</version>
</dependency>コレクションの作成
サンプルコードを実行する前に、Lindorm コンソールの クラスター管理 ページでコレクションを作成してください。詳細については、「コレクションの管理」をご参照ください。
接続パラメーター
LindormSearch に接続するには、以下のパラメーターを使用します。
| パラメーター | 値 | 説明 |
|---|---|---|
| ドライバークラス | com.aliyun.lindorm.search.client.Driver | Class.forName() |
| 接続 URL | jdbc:lindorm:search:url=http://<endpoint>:30070 | <endpoint> はご利用の LindormSearch クラスターの SQL エンドポイントに置き換えてください |
user | ユーザー名 | 認証プロパティ |
password | パスワード | 認証プロパティ |
サンプルコード
以下の例では、LindormSearch に接続し、一連の DDL および DML 操作(テーブルの作成、行のアップサート、結果のクエリ、行の削除、テーブルの削除)を実行します。
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 JDBC ドライバーをロードします。
Class.forName("com.aliyun.lindorm.search.client.Driver");
// ご利用の 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))");
// 単一行を書き込みます。
stmt.execute("upsert into test(c1,c2) values(1,'深セン')");
stmt.execute("upsert into test(c1,c2) values(2,'上海')");
// 複数行を書き込みます。
stmt.execute("upsert into test(c1,c2) values(3,'北京'),(4,'広州'),(5,'杭州')");
// すべての行をクエリします。
ResultSet rs = stmt.executeQuery("select * from test order by c1");
System.out.println("#####削除前:");
while (rs.next()) {
System.out.println("c1=" + rs.getInt("c1") + ",c2=" + rs.getString("c2"));
}
// c1 > 3 の行を削除します。
stmt.execute("delete from test where c1 >3");
// 残りの行をクエリします。
rs = stmt.executeQuery("select * from test order by c1");
System.out.println("#####削除後:");
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();
}
}
}
}接続を管理するには、接続プールを使用してください。接続プールを使用することで、各操作ごとに接続を確立・切断するオーバーヘッドを回避でき、クエリのパフォーマンスが向上します。