第7章 データ型の使用

目次

配列の使用
Binaryの使用
列挙の使用
Fixed Binaryの使用
マップの使用
埋込みレコードの使用

Oracle NoSQL Databaseが提供する多くの型は使いやすいです。それらの使用方法は、このマニュアル全体にちりばめられています。ただし、コンテナ・メソッドを使用しているいくつかの型は少し複雑です。この章では、それらの使用方法を説明します。

この章で説明している型は、配列、マップ、レコード、列挙およびバイト配列です。この章では、それぞれの型の値の読込みおよび書込みの方法を示します。

配列の使用

配列はすべてが同じ型の一連の値です。

表のフィールドを配列として宣言する場合、ARRAY()文を使用します。

主キーがUIDで2番目のフィールドに文字列の配列を持つシンプルな2つのフィールドの表を定義するには、次のスクリプトを使用します。

CREATE TABLE myTable (
    uid INTEGER,
    myArray ARRAY(STRING),
    PRIMARY KEY(uid)
) 

配列値では、CHECK制約がサポートされています。詳細は、「CHECK」を参照してください。

配列では、DEFAULTおよびNOT NULL制約はサポートされていません。

配列に書き込むには、Row.putArray()を使用し、これにより、ArrayValueクラス・インスタンスが返されます。次に、ArrayValue.put()を使用して、配列に要素を書き込みます。

TableAPI tableH = kvstore.getTableAPI();

Table myTable = tableH.getTable("myTable");

Row row = myTable.createRow();
row.put("uid", 12345);

ArrayValue av = row.putArray("myArray");
av.add("One");
av.add("Two");
av.add("Three"); 

tableH.put(row, null, null);

ArrayValueには値の配列を配列に追加することで、複数の値を配列に追加できるメソッドがあります。これは値の配列が配列のスキーマと一致することを前提とします。たとえば、前述の例は次の方法で実行できます。

TableAPI tableH = kvstore.getTableAPI();

Table myTable = tableH.getTable("myTable");

Row row = myTable.createRow();
row.put("uid", 12345);

ArrayValue av = row.putArray("myArray");
String myStrings[] = {"One", "Two", "Three"};
av.add(myStrings);

tableH.put(row, null, null);

配列を読み込むにはRow.get().asArray()を使用します。これにより、ArrayValueクラス・インスタンスが返されます。ArrayValue.get()を使用して指定した索引から配列の要素を取得できるようになるか、ArrayValue.toList()を使用してJavaのListとして配列を戻すことができるようになります。どちらの場合でも、取得した値はFieldValueとして返され、これにより、FieldValue.asString()などのキャスト・メソッドを使用してカプセル化された値が取得できます。

たとえば、前述の例で作成された配列全体を繰り返すには次のように記述します。

TableAPI tableH = kvstore.getTableAPI();

Table myTable = tableH.getTable("myTable");

/* Create a primary key for user id 12345 and get a row */
PrimaryKey key = myTable.createPrimaryKey();
key.put("uid", 12345);
Row row = tableH.get(key, null);

/* Iterate over the array, displaying each element as a string */
ArrayValue av = row.get("myArray").asArray();
for (FieldValue fv: av.toList()) {
    System.out.println(fv.asString().get()); }