A GSGStreamsWriteTable
このドキュメントの例は、データが移入された
Users
表に基づいています。この付録では、この表の作成および移入に使用したアプリケーションを示します。
ノート:
この例ではネームスペースを使用していませんが、ストリーミングAPIではネームスペースがサポートされています。ns1などのネームスペース内の表を評価するには、表名の前にネームスペースを追加し、その後にコロンを付けます。たとえば、ns1:Users
のようになります。
このクラスは、コメントを含めずに、完全性のためにのみ提供しています。このクラスによって実行されるアクションは、Oracle NoSQL Database Java APIを使用したことがある方にとって理解しやすいものになります。Java Direct Driver開発者ガイドを参照してください。
package pubsub;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import oracle.kv.FaultException;
import oracle.kv.KVStore;
import oracle.kv.KVStoreConfig;
import oracle.kv.KVStoreFactory;
import oracle.kv.StatementResult;
import oracle.kv.table.PrimaryKey;
import oracle.kv.table.Row;
import oracle.kv.table.Table;
import oracle.kv.table.TableAPI;
public class GSGStreamsWriteTable {
private static final String[] hhosts = {"localhost:5000"};
private static final int MAX_ROWS = 200;
public static void main(String args[]) {
GSGStreamsWriteTable gswt = new GSGStreamsWriteTable();
gswt.run(args);
System.out.println("All done.");
}
private void run(String args[]) {
KVStoreConfig kconfig = new KVStoreConfig("kvstore", hhosts);
KVStore kvstore = KVStoreFactory.getStore(kconfig);
defineTable(kvstore);
writeTable(kvstore);
}
private void defineTable(KVStore kvstore) {
System.out.println("Creating table schema....");
TableAPI tableAPI = kvstore.getTableAPI();
StatementResult result = null;
String statement = null;
try {
statement = "DROP TABLE IF EXISTS Users";
result = kvstore.executeSync(statement);
displayResult(result, statement);
statement = "CREATE TABLE Users ( " +
" uid INTEGER, " +
" myJSON JSON, " +
" PRIMARY KEY(uid))";
result = kvstore.executeSync(statement);
displayResult(result, statement);
} catch (IllegalArgumentException e) {
System.out.println("Invalid statement:\n" +
e.getMessage());
} catch (FaultException e) {
System.out.println
("Statement couldn't be executed, please retry: " + e);
}
}
private void writeTable(KVStore kvstore) {
System.out.println("In writeTable....");
TableAPI tableH = kvstore.getTableAPI();
Table myTable = tableH.getTable("Users");
int count = 0;
Random rand = new Random();
/*
* Write rows to the table, using random information
* for the JSON data.
*/
while (count < MAX_ROWS) {
Row row = myTable.createRow();
row.put("uid", count);
int q = rand.nextInt(10) + 1;
List<Integer> integersList = new ArrayList<Integer>();
int a_count = 0;
while (a_count < q) {
int val = rand.nextInt(q + 10) + 1;
integersList.add(val);
a_count++;
}
String json = "{";
json += "\"quantity\" : " + q + ", ";
json += "\"myArray\" : " + integersList.toString();
json += "}";
/* Write the row to the store */
row.putJson("myJSON", json);
tableH.put(row, null, null);
/* Randomly delete table rows */
int shouldDelete = rand.nextInt(10);
if (shouldDelete == 1) {
/* Randomly select a row to delete */
int toDelete = rand.nextInt(count);
PrimaryKey pk = myTable.createPrimaryKey();
pk.put("uid", toDelete);
tableH.delete(pk, null, null);
}
count++;
}
System.out.println("Wrote " + count + " rows");
}
private void displayResult(StatementResult result,
String statement) {
System.out.println("===========================");
if (result.isSuccessful()) {
System.out.println("Statement was successful:\n\t" +
statement);
System.out.println("Results:\n\t" + result.getInfo());
} else if (result.isCancelled()) {
System.out.println("Statement was cancelled:\n\t" +
statement);
} else {
/*
* statement wasn't successful: may be in error, or may
* still be in progress.
*/
if (result.isDone()) {
System.out.println("Statement failed:\n\t" +
statement);
System.out.println("Problem:\n\t" +
result.getErrorMessage());
} else {
System.out.println("Statement in progress:\n\t" +
statement);
System.out.println("Status:\n\t" +
result.getInfo());
}
}
}
}