ストアでの新しい行の表への書込みは、通常は同一の操作です(ただし、行を更新する場合のみ、または作成する場合のみ動作するメソッドは存在します。このことは、この項の少し後ろの方で説明しています)。
表にデータを追加できるのは、表をストアに追加した後のみであることに注意してください。詳細は、「Oracle NoSQL Database表および索引の概要」を参照してください。
ストア内の表に行を書き込むには、次の手順を実行します。
書き込む表のハンドルを作成します。そのためには、KVStore.getTableAPI()を使用してTableAPIクラス・インスタンスを取得します。次に、そのインスタンスとTableAPI.getTable()を使用して、目的の表ハンドルを取得します。これにより、Tableクラス・インスタンスが返されます。
前の手順で取得されたTableインスタンスを使用して、Rowクラス・インスタンスを作成します。Table.createRow()メソッドを使用してこれを実行します。
Row.put()を使用して、Row内の各フィールドに書き込みます。
Table.put()を使用して、新しい行をストアに書き込みます。
次に、ストアへの行の書込みの簡単な例を示します。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 to getTable() must be identical
// to the name that you gave the table when you created
// the table using the CLI's 'table create' command.
Table myTable = tableH.getTable("myTable");
// Get a Row instance
Row row = myTable.createRow();
// Now put all of the cells in 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 value,
// this operation will throw an IllegalArgumentException.
tableH.put(row, null, null);
子表に書き込むには、まず子表が属する親表に行を作成します。そのためには、親行にデータを移入します。次に、子表の行を作成します。その際に、親表で使用される主キー、および子表の行で使用される主キーを指定する必要があります。
たとえば、「子表の定義」では子表の作成方法を示しました。その表にデータを書き込むには、次の手順を実行します。
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();
// First, populate a row in the parent table
Table myTable = tableH.getTable("myTable");
// Get a Row instance
Row row = myTable.createRow();
// Now put all of the cells in the row.
row.put("itemCategory", "Bolts");
row.put("description", "Metric & US sizes");
// Now write the table row to the store.
tableH.put(row, null, null);
// Now populate the corresponding child table
Table myChildTable = tableH.getTable("myTable.myChildTable");
// 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()
このメソッドでは、指定されたバージョン情報に値が一致する場合にのみ行が格納されます。詳細は、「バージョンの使用」を参照してください。