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();
}
}
}
}