このトピックでは、Go クライアントで OceanBase Database に接続し、特定の API を呼び出すことでクライアントでデータベースを使用する方法について説明します。
OceanBase Database への接続
Go クライアントを使用して OceanBase Database に接続できます。詳細については、「Go クライアントを使用して OceanBase Database に接続する」をご参照ください。
CREATE TABLE 文を実行してテーブルを作成します。
CREATE TABLE IF NOT EXISTS `test_varchar_table_00` (
`c1` varchar(20) NOT NULL,
`c2` varchar(20) DEFAULT NULL,
`c3` varchar(20) DEFAULT NULL,
PRIMARY KEY (`c1`)
);
insert
この API を呼び出して行を挿入できます。プライマリキーの競合が発生した場合、つまりターゲット行が既に存在する場合、挿入は失敗します。
次に例を示します。
long insert(String tableName, Object rowkey, String[] columns, Object[] values);
long insert(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。
client.insert( "testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value".getBytes() }
);
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの値。
columns: 挿入する列の名前。1 つ以上の列を挿入できます。
values: 挿入する列の値。
long: 挿入された列の数を示す戻り値。この例では、1 行が挿入されます。
get
この API を呼び出して行を取得できます。ターゲット行が存在する場合、行が取得されます。存在しない場合、結果セットは空です。
次に例を示します。
Map<String, Object> get(String tableName, Object rowkey, String[] columns);
Map<String, Object> get(String tableName, Object[] rowkeys, String[] columns);
// rowkey はプライマリキーです。
Map<String, Object> res = client.get("testHash",
new Object[] { 1L, "partition".getBytes(), timestamp },
new String[] { "K", "Q", "T","V" }
);
// 戻り値がオブジェクトの場合、Long k = (Long) res.get("K"); など、明示的な型変換を実行できます。
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの値。
columns: 取得する列の名前。1 つ以上の列を取得できます。
Map<String, Object>: 戻り値。ターゲット列が存在する場合、列が取得されます。存在しない場合、結果セットは空です。
delete
この API を呼び出して行を削除できます。ターゲット行が存在しない場合、affectrows = 0 が返されます。存在する場合、削除された行の数(この場合は 1 行)が返されます。
次に例を示します。
long delete(String tableName, Object rowkey);
long delete(String tableName, Object[] rowkeys);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。
client.delete("testHash", new Object[] { 1L, "partition".getBytes(), timeStamp });
// 戻り値は、影響を受けた行の数を示します。この例では、戻り値は 1L で、1 行を示します。
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: 削除するプライマリキー。
long: 削除された行の数を示す戻り値。このサンプルでは、1 行が削除されます。
update
この API を呼び出して行を更新できます。ターゲット行が存在しない場合、affectrows = 0 が返されます。存在する場合、更新された行の数(この場合は 1 行)が返されます。
次に例を示します。
long update(String tableName, Object rowkey, String[] columns, Object[] values);
long update(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。
client.update("testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value1L".getBytes() }
);
// 戻り値は、影響を受けた行の数を示します。この例では、戻り値は 1L で、1 行を示します。
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: 更新されたプライマリキーの名前。
columns: 更新する列の名前。1 つ以上の列を更新できます。
values: 更新する列の値。1 つ以上の列の値を指定できます。
long: 戻り値。削除された行の数を示します。このサンプルでは、1 行が削除されます。
replace
この API を呼び出して行を置換できます。次の 3 つのケースがあります。
ターゲット行が存在しない場合、新しい行が挿入されます。
ターゲット行が既に存在する場合、つまりプライマリキーの競合が発生した場合、元の行が削除され、新しい行が挿入されます。
一意なインデックスの競合が発生した場合、競合する行が削除され、新しい行が挿入されます。
次に例を示します。
long replace(String tableName, Object rowkey, String[] columns, Object[] values);
long replace(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。
client.replace("testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value1L".getBytes() }
);
// 戻り値は、影響を受けた行の数を示します。この例では、戻り値は 1L で、1 行を示します。
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの名前。
columns: 置換する列の名前。1 つ以上の列を置換できます。
values: 置換する列の値。1 つ以上の列の値を指定できます。
long: 置換された行の数を示す戻り値。このサンプルでは、1 行が置換されます。これは 1 行を示します。
insertOrupdate
この API を呼び出して行を挿入または更新できます。次の 3 つのケースがあります。
ターゲット行が存在しない場合、新しい行が挿入されます。
ターゲット行が既に存在する場合、つまりプライマリキーの競合が発生した場合、ターゲット行が更新されます。
挿入で一意なインデックスの競合が発生した場合、ターゲット行も更新されます。
次に例を示します。
long insertOrUpdate(String tableName, Object rowkey, String[] columns, Object[] values);
long insertOrUpdate(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。
client.insertOrUpdate("testHash",
new Object[] { 1L, "partition".getBytes(), timestamp },
new String[] { "V" },
new Object[] { "bb".getBytes() }
);
// 戻り値は、影響を受けた行の数を示します。この例では、戻り値は 1L で、1 行を示します。
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの名前。
columns: 操作する列の名前。1 つ以上の列を指定できます。
values: 挿入または更新する列の値。1 つ以上の列の値を指定できます。
long: 挿入または更新された行の数を示す戻り値。このサンプルでは、1 行が操作されます。
increment
この API を呼び出して、指定された列の値を atomic に増分値だけ増やすことができます。増分値は負の値にすることができます。次の 3 つのケースがあります。
計算結果が列型の値の範囲を超えると、エラーが返されます。
ターゲット行が存在しない場合、新しい行が挿入され、増分値が初期値(元の値が 0 と同じ)として設定されます。
ターゲット行が存在するが、指定された列の値が NULL の場合、増分値が初期値(元の値が 0 と同じ)として設定されます。
次に例を示します。
Map<String, Object> increment(String tableName, Object rowkey, String[] columns,Object[] values, boolean withResult);
Map<String, Object> increment(String tableName, Object[] rowkeys, String[] columns, Object[] values, boolean withResult);
// サンプルコードの rowkey は、テーブルのプライマリキーに対応しています。デフォルト値は null です。したがって、最終結果は c2=1、c3=2 になります。
Client.increment("test_increment",
"test_null",
new String[] { "c2", "c3" },
new Object[] { 1, 2 }, true );
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの値。
columns: 値を増分する列の名前。1 つ以上の列を指定できます。
values: 増分する値。1 つ以上の列の値を指定できます。
withResult: 自動増分結果セットを返すかどうかを指定します。
Map<String, Object>: 戻り値。withResult が false に設定されている場合、返される結果は Map.empty です。
append
この API を呼び出して、指定された列の値に atomic に文字列を追加できます。次の 3 つのケースがあります。
計算結果が列型の値の範囲を超えると、エラーが返されます。
ターゲット行が存在しない場合、新しい行が挿入され、追加された文字列が初期値(元の値が空の文字列と同じ)として設定されます。
ターゲット行が存在するが、指定された列の値が NULL の場合、追加された文字列が初期値(元の値が空の文字列と同じ)として設定されます。
次に例を示します。
Map<String, Object> append(String tableName, Object rowkey, String[] columns, Object[] values,boolean withResult);
Map<String, Object> append(String tableName, Object[] rowkeys, String[] columns, Object[] values, boolean withResult);
// 行 c2 = {1}、c3 = {"P"} を挿入します。
client.insert("test_append", "test_normal", new String[] { "c2", "c3" }, new Object[] { new byte[] { 1 }, "P" });
// 追加操作後、c2 = {1, 2}、c3 = {"PY"} になります。
Map<String, Object> res = client.append("test_append", "test_normal", new String[] { "c2", "c3" }, new Object[] { new byte[] { 2 }, "Y" }, true);
パラメーターの説明は次のとおりです。
tableName: テーブルの名前。
rowkey: プライマリキーの値。
columns: 文字列を追加する列の名前。1 つ以上の列を指定できます。
values: 追加する文字列。1 つ以上の列の文字列を指定できます。
withResult: 追加された文字列の結果セットを返すかどうかを指定します。
Map<String, Object>: 戻り値。withResult が false に設定されている場合、返される結果は Map.empty です。
scan
この API を呼び出して、複数範囲のスキャンまたは逆スキャンを実行できます。この API は、プライマリキーまたはプライマリキーのプレフィックスに基づく範囲スキャンをサポートします。プライマリキーが指定されていない場合、この API はインデックスまたはインデックスプレフィックスに基づく範囲スキャンもサポートします。
次に例を示します。
// 例
TableQuery tableQuery = client.query("table_name"); // テーブル名に基づいてスキャンするオブジェクトを作成します。
re"sultSet = tableQuery.select("column2").primaryIndex().addScanRange("min1", "max1).addScanRange("min2", "max2").setBatchSize(batch_size).execute();
while(resultSet.next()) {
Map<String, Object> value = resultSet.getRow();
}
パラメーターの説明は次のとおりです。
table_name: スキャンするテーブルの名前。
primaryIndex: プライマリキーに基づいてスキャンすることを指定します。
column2: 結果を取得する列。たとえば、テーブルに列 1 ~ 4 が含まれている場合、値 column2 は column2 のデータのみが返されることを示します。
addScanRange: スキャンの範囲。min と max は、それぞれ範囲の最小値と最大値を示します。
batch_size: 各バッチで返す行の数。スキャン条件を満たす行のみが返されます。
batch
この API を呼び出して、複数の操作を一括して実行できます。
次に例を示します。
TableBatchOps batchOps = client.batch("test_varchar_table");
batchOps.insert("foo", new String[] { "c2" }, new String[] { "bar" });
batchOps.get("foo", new String[] { "c2" });
batchOps.delete("foo");
List<Object> results = batchOps.execute();
// 結果のリストでは、insert 操作は affectedRows を返し、get 操作は map を返し、delete 操作は affectedRows を返します。
パラメーターの説明は次のとおりです。
TableBatchOps: 操作するオブジェクト。ObTableClient を使用して作成されます。前の例では、client.batch(table_name) です。
List<Object>: 戻り値。結果セットには、insert、get、delete などのすべての操作の結果が含まれます。