TableOperationFactory
クラスを使用して、ストアでの各操作を表すTableOperation
クラス・インスタンスを作成して順序を作成します。TableOperationFactory
のインスタンスは、TableAPI.getTableOperationFactory()
を使用して取得します。
たとえば、次のように定義された表を使用しているとします。
## Enter into table creation mode table create -name myTable ## Now add the fields add-field -type STRING -name itemType add-field -type STRING -name itemCategory add-field -type STRING -name itemClass add-field -type STRING -name itemColor add-field -type STRING -name itemSize add-field -type FLOAT -name price add-field -type INTEGER -name inventoryCount primary-key -field itemType -field itemCategory -field itemClass -field itemColor -field itemSize shard-key -field itemType -field itemCategory -field itemClass ## Exit table creation mode exit
次のようなデータを含む表:
行1:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: small |
price: 12.07 |
inventoryCount: 127 |
行2:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: medium |
price: 13.07 |
inventoryCount: 201 |
行3:
itemType: Hats |
itemCategory: baseball |
itemClass: longbill |
itemColor: red |
itemSize: large |
price: 14.07 |
inventoryCount: 39 |
さらに、この表には更新が必要な行(価格、在庫更新など)があり、すべての行について一貫して更新が行われるようにするとします。
ここで、次のように順序を作成します。
package kvstore.basicExample; import java.util.ArrayList; import oracle.kv.KVStore; import oracle.kv.KVStoreConfig; import oracle.kv.KVStoreFactory; import oracle.kv.DurabilityException; import oracle.kv.FaultException; import oracle.kv.OperationExecutionException; import oracle.kv.RequestTimeoutException; import oracle.kv.table.PrimaryKey; import oracle.kv.table.Row; import oracle.kv.table.Table; import oracle.kv.table.TableAPI; import oracle.kv.table.TableOperationFactory; import oracle.kv.table.TableOperation; ... // kvstore handle creation omitted. ... TableAPI tableH = kvstore.getTableAPI(); Table myTable = tableH.getTable("myTable"); // We use TableOperationFactory to create items for our // sequence. TableOperationFactory tof = tableH.getTableOperationFactory(); // This ArrayList is used to contain each item in our sequence. ArrayList<TableOperation> opList = new ArrayList<TableOperation>(); // Update each row, adding each to the opList as we do. Row row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "small"); row.put("price", new Float(13.07)); row.put("inventoryCount", 107); opList.add(tof.createPut(row, null, true)); row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "medium"); row.put("price", new Float(14.07)); row.put("inventoryCount", 198); opList.add(tof.createPut(row, null, true)); row = myTable.createRow(); row.put("itemType", "Hats"); row.put("itemCategory", "baseball"); row.put("itemClass", "longbill"); row.put("itemColor", "red"); row.put("itemSize", "large"); row.put("price", new Float(15.07)); row.put("inventoryCount", 139); opList.add(tof.createPut(row, null, true));
前述の例では、同じシャード・キーを共有する行のみを更新することに注意してください。この場合、シャード・キーにはitemType
、itemCategory
およびitemClass
フィールドが含まれます。これらのフィールドの値が他のフィールドと異なる場合、順序は正常に実行されません。