固定バイナリの使用

BINARY文を使用して、固定バイナリ・フィールドを宣言できます。この場合、フィールドのサイズもバイトで指定する必要があります。次に、Javaバイト配列を使用してフィールド値を読取りおよび書込みします。ただし、バイト配列が指定したサイズと同じではない場合、フィールドに書き込む際にIllegalArgumentExceptionがスローされます。Javaバイト配列を使用してフィールド値を書込みします。

ラージ・バイナリ・オブジェクトを格納する場合には、バイナリ・フィールドではなくLOB APIを使用する必要があります。LOB APIの使用に関する情報は、『Oracle NoSQL APIラージ・オブジェクトAPI』の概要を参照してください。

すべてのフィールド値が同じサイズである場合、バイナリ・データ型より優先して固定バイナリを使用する必要があります。固定バイナリは、配列のサイズを格納しておく必要がないため、コンパクトなストレージ形式です。バイナリ・データ型の情報は、バイナリの使用を参照してください。

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

CREATE TABLE myTable (
    uid INTEGER,
    myByteArray BINARY(20),
    PRIMARY KEY (uid)
) 

バイナリ値では、CHECKDEFAULTおよびNOT NULL制約はサポートされていません。

バイト配列を書き込むにはRow.putFixed()を使用します。ここでも、バイト配列がこのフィールドに定義されているサイズと一致しない場合、IllegalArgumentExceptionがスローされます。

TableAPI tableH = kvstore.getTableAPI();

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

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

String aString = "The quick brown fox.";
try {
    row.putFixed("myByteArray", aString.getBytes("UTF-8"));
} catch (UnsupportedEncodingException uee) {
    uee.printStackTrace();
}

tableH.put(row, null, null); 

固定バイナリ・フィールドを読み込むにはRow.get().asFixedBinary()を使用します。これにより、FixedBinaryValueクラス・インスタンスが返されます。次にFixedBinaryValue.get()を使用して格納されているバイト配列を取得できます。

次に例を示します。

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);

byte[] b = row.get("myByteArray").asFixedBinary().get();
String aString = new String(b);
System.out.println("aString: " + aString);