配列の使用
配列はすべてが同じ型の一連の値です。
表のフィールドを配列として宣言する場合、ARRAY()
文を使用します。
主キーがUIDで2番目のフィールドに文字列の配列を持つシンプルな2つのフィールドの表を定義するには、次のDDL文を使用します。
CREATE TABLE myTable (
uid INTEGER,
myArray ARRAY(STRING),
PRIMARY KEY(uid)
)
配列では、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()); }