ストア内の表への行の書込み

データ・ストアの表への新しい行の書込みおよび既存の行の更新は同様の操作です。この項の後半では、行を更新する場合または行を作成する場合にのみ機能するメソッドについて説明します。表にデータを追加できるのは、表をストアに追加した後のみです。詳細は、「Oracle NoSQL Database表および索引の概要」を参照してください。

ストア内の表に行を書き込むには、次の手順を実行します。

  1. データを書き込む表のハンドルを作成します。KVStore.getTableAPI()を使用して、TableAPIインタフェース・インスタンスを取得することで、これを実行します。そのインスタンスを使用して、TableAPI.getTable()によって表のハンドルを取得します。これにより、Tableインタフェース・インスタンスが返されます。

    注意:

    TableAPI.getTable()メソッドは、サーバー側アクセスを必要とする消費が多いコールです。最高のパフォーマンスを得るには、表ハンドルが必要になるたびにこのメソッドをコールしないでください。可能であれば、コードの設定セクションで関連するすべての表に対してこのメソッドをコールします。その後、それらのハンドルをアプリケーションを通して再利用します。

  2. 前のステップで取得したTableインスタンスを使用して行インタフェース・インスタンスを作成するには、Table.createRow()メソッドを使用します。

  3. Row.put()メソッドを使用して、行の各フィールドに書き込みます。

    NULL値を書き込むには、Row.put()ではなくRow.putNull()を使用します。

  4. TableAPI.put()を使用して、新しい行をストアに書き込みます。

    注意:

    書き込む表にIDENTITY列が含まれている場合は、シーケンス・ジェネレータから生成された値が行で使用可能になります。詳細は、IDENTITY列を使用した表の定義を参照してください。

特別な目的のストリームを使用して、行をストアにロードすることもできます。詳細は、一括格納操作を参照してください。

次の例は、KVStoreハンドルを作成済であることを前提として、行をストアに書き込む方法を示しています。

package kvstore.basicExample;

import oracle.kv.KVStore;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;

...

// KVStore handle creation is omitted for brevity

...

TableAPI tableH = kvstore.getTableAPI();

// The name you give getTable() must be identical
// to the name of the table when you created it with
// the CREATE TABLE DDL statement (myTable in this example).
Table myTable = tableH.getTable("myTable");

// Get a Row instance
Row row = myTable.createRow();

// Use row.put to put all of the cells into the row. 
// This does NOT actually write the data to the store.

row.put("item", "Bolts");
row.put("description", "Hex head, stainless");
row.put("count", 5);
row.put("percentage", 0.2173913);

// Now write the table to the store.
// "item" is the row's primary key. If we had not set that key and its value, 
// this operation will result in an IllegalArgumentException.
tableH.put(row, null, null); 

子表へのデータの書込み

子表に書き込むには、親表に対するタスクを完了します。ただし、parent-table.child-tableなどの2つのパートからなる表明を使用します。

たとえば、「子表の定義」では子表の作成方法を示しました。その表にデータを書き込むには、次の手順を実行します。

package kvstore.basicExample;

import oracle.kv.KVStore;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;

...

// KVStore handle creation is omitted for brevity

...

TableAPI tableH = kvstore.getTableAPI();

// Get the corresponding child table 
Table myChildTable = tableH.getTable("myInventory.itemDetails");

// Get a row instance
Row childRow = myChildTable.createRow();

// Populate the rows. Because the parent table's "itemCategory"
// field is a primary key, this must be populated in addition
// to all of the child table's rows
childRow.put("itemCategory", "Bolts");
childRow.put("itemSKU", "1392610");
childRow.put("itemDescription", "1/4-20 x 1/2 Grade 8 Hex");
childRow.put("price", new Float(11.99));
childRow.put("inventoryCount", 1457);

その他の格納操作

前述した非常に単純な使用方法であるTableAPI.put()メソッド以外に、使用できる格納操作が3つあります。

  • TableAPI.putIfAbsent()

    このメソッドでは、行の主キー値が表に存在しない場合にのみ行が格納されます。つまり、このメソッドは、作成操作になった場合にのみ成功します。

  • TableAPI.putIfPresent()

    このメソッドでは、行の主キー値が表にすでに存在する場合にのみ行が格納されます。つまり、このメソッドは、更新操作になった場合にのみ成功します。

  • TableAPI.putIfVersion()

    このメソッドでは、指定されたバージョン情報に値が一致する場合にのみ行が格納されます。詳細は、「行バージョンの使用」を参照してください。