問合せの使用

Oracle NoSQL Databaseのアプリケーションに対して問合せを使用することについて学習します。

Oracle NoSQL Databaseには、データの読取りおよび更新のための豊富な問合せ言語が用意されています。問合せ言語の詳細は、SQLリファレンス・ガイドを参照してください。

問合せを実行するには、NoSQLHandle.query() APIを使用します。

SELECT問合せを実行して表からデータを読み取るには、次のステップを実行します。
/* QUERY a table named "users", using the primary key field "name". 
 * The table name is inferred from the query statement.
 */
QueryRequest queryRequest = new QueryRequest().
setStatement("SELECT * FROM users WHERE name = \"Taylor\"");

/* Queries can return partial results. It is necessary to loop,
 * reissuing the request until it is "done"
 */

do {
  QueryResult queryResult = handle.query(queryRequest);

  /* process current set of results */
  List<MapValue> results = queryResult.getResults();
  for (MapValue qval : results) {
    //handle result
  }
} while (!queryRequest.isDone());

問合せを使用するときには、次の考慮事項に注意してください。

  • 同じ問合せを複数回実行する場合は、準備された問合せを使用できます。準備された問合せを使用すると、問合せ文字列を毎回開始するよりも実行の効率が上がります。問合せ言語およびAPIは、再利用に役立つ問合せ変数をサポートしています。

たとえば、準備された文を使用して、SELECT問合せを実行し、表からデータを読み取る場合は、次のようになります。

/* Perform the same query using a prepared statement. This is more
 * efficient if the query is executed repeatedly and required if
 * the query contains any bind variables.
 */
String query = "DECLARE $name STRING; " +
               "SELECT * from users WHERE name = $name";

PrepareRequest prepReq = new PrepareRequest().setStatement(query);

/* prepare the statement */
PrepareResult prepRes = handle.prepare(prepReq);

/* set the bind variable and set the statement in the QueryRequest */
prepRes.getPreparedStatement()
       .setVariable("$name", new StringValue("Taylor"));
QueryRequest queryRequest = new QueryRequest().setPreparedStatement(prepRes);

/* perform the query in a loop until done */
do {
  QueryResult queryResult = handle.query(queryRequest);
  /* handle result */
} while (!queryRequest.isDone());