ストアでの新しい行の表への書込みは、通常は同一の操作です(ただし、行を更新する場合のみ、または作成する場合のみ動作するメソッドは存在します。このことは、この項の少し後ろの方で説明しています)。
表にデータを追加できるのは、表をストアに追加した後のみであることに注意してください。詳細は、「Oracle NoSQL Database表および索引の概要」を参照してください。
ストア内の表に行を書き込むには、次の手順を実行します。
書き込む表のハンドルを作成します。KVStore.getTableAPI()
を使用して、TableAPI
インタフェース・インスタンスを取得することで、これを実行します。次に、TableAPI.getTable()
を使用して目的の表のハンドルを取得するために、そのインスタンスを使用します。これにより、Table
インタフェース・インスタンスが返されます。
TableAPI.getTable()
は、サーバー側アクセスを必要とする消費が多いコールです。パフォーマンスの観点では、表ハンドルが必要なたびにこのメソッドを呼び出す方法は間違っています。かわりに、コードの設定セクションで関連するすべての表に対してこのメソッドを呼び出し、それらのハンドルをアプリケーションを通して再利用します。
前の手順で取得されたTable
インスタンスを使用して、Row
インタフェース・インスタンスを作成します。Table.createRow()
メソッドを使用してこれを実行します。
Row.put()
を使用して、Row
内の各フィールドに書き込みます。
TableAPI.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 CREATE TABLE DDL statement. 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()
このメソッドでは、指定されたバージョン情報に値が一致する場合にのみ行が格納されます。詳細は、「行バージョンの使用」を参照してください。