本章節將介紹如何使用 Go 用戶端以及具體的介面。
串連 OceanBase 資料庫
您可使用 Go 用戶端登入 OceanBase,具體方法可參考 通過 Go 用戶端串連 OceanBase 資料庫。
執行 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 介面
您可使用該介面插入一行記錄,但如果主鍵衝突(即行已存在),則插入失敗。
樣本如下:
long insert(String tableName, Object rowkey, String[] columns, Object[] values);
long insert(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// 範例,rowkey 對應表中的 primary key
client.insert( "testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value".getBytes() }
);
參數說明:
tableName:表名
rowkey:主索引值
columns:插入的列名(一列或多列)
values:插入的列值
long:傳回值,表示具體的插入數量(1行)
get 介面
您可使用該介面取回一行記錄,如果行存在,則取回行,否則返回 empty。
樣本如下:
Map<String, Object> get(String tableName, Object rowkey, String[] columns);
Map<String, Object> get(String tableName, Object[] rowkeys, String[] columns);
// rowkey 即 primary key
Map<String, Object> res = client.get("testHash",
new Object[] { 1L, "partition".getBytes(), timestamp },
new String[] { "K", "Q", "T","V" }
);
// 返回的結果 value 是 object,直接強轉一下就行 例如 Long k = (Long) res.get("K");
參數說明:
tableName:表名
rowkey:主索引值
columns:擷取的列名(一行或多列)
Map<String, Object>:傳回值,成功返回所選列結果,失敗返回 empty
delete 介面
您可使用該介面刪除一行記錄,如果該行不存在,返回 affectrows = 0,否則返回具體刪除的行數量(1)。
樣本如下:
long delete(String tableName, Object rowkey);
long delete(String tableName, Object[] rowkeys);
// 範例,rowkey 對應表中的 primary key
client.delete("testHash", new Object[] { 1L, "partition".getBytes(), timeStamp });
// 返回結果表示 affectrows, 這裡返回 1L
參數說明:
tableName:表名
rowkey:需要刪除的主鍵記錄
long:傳回值,表示具體刪除的行數量(1行)
update 介面
您可使用該介面更新一行記錄,如果目標行不存在,返回 affectrows = 0,否則返回具體更新的行數量(1)。
樣本如下:
long update(String tableName, Object rowkey, String[] columns, Object[] values);
long update(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// 範例,rowkey 為表的 primary_key
client.update("testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value1L".getBytes() }
);
// 返回結果表示 affectrows, 這裡返回 1L
參數說明:
tableName:表名
rowkey:更新的主鍵名
columns:更新的目標列(一列或多列)
values:需要更新的列值(一列或多列)
long 傳回值,表示具體更新的行數量(1行)
replace 介面
您可使用該介面替換一行記錄,使用該介面會出現以下三種情況:
目標行不存在,則插入記錄。
目標行已存在(即主鍵衝突),則刪除原紀錄,然後再插入這行記錄。
如果有唯一索引衝突,則刪除所有引起衝突的行,然後再插入這行記錄。
樣本如下:
long replace(String tableName, Object rowkey, String[] columns, Object[] values);
long replace(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// 範例,rowkey 為表的 primary_key
client.replace("testHash",
new Object[] { 1L, "partition".getBytes(), timeStamp },
new String[] { "V" },
new Object[] { "value1L".getBytes() }
);
// 返回結果表示 affectrows, 這裡返回 1L
參數說明:
tableName:表名
rowkey:主鍵名
columns:替換目標的列名(一列或多列)
values:替換目標的列值 (一列或多列)
long:傳回值,表示具體 replace 的行數量(1行)
insertOrupdate 介面
您可使用該介面插入或修改一行記錄,使用該介面會出現以下三種情況:
目標行不存在,則插入記錄。
目標行已存在(即主鍵衝突),則更新這行記錄。
如果插入有唯一索引衝突,則也執行更新操作。
樣本如下:
long insertOrUpdate(String tableName, Object rowkey, String[] columns, Object[] values);
long insertOrUpdate(String tableName, Object[] rowkeys, String[] columns, Object[] values);
// 範例,rowkey 為表的 primary_key
client.insertOrUpdate("testHash",
new Object[] { 1L, "partition".getBytes(), timestamp },
new String[] { "V" },
new Object[] { "bb".getBytes() }
);
// 返回結果表示 affectrows,這裡返回 1L
參數說明:
tableName:表名
rowkey:主鍵名
columns:操作的目標列名(一列或多列)
values:目標列值(一列或多列)
long:傳回值,表示具體 insert_or_update 的行數量(1行)
increment 介面
您可使用該介面把指定列的值原子地增加某個增量值(可以為負數),使用該介面會出現以下三種情況:
計算結果溢出列類型的範圍,報錯。
目標行不存在,則插入,把增量值設定為初值(即等價於原值為 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 為表的 primary_key,預設為 null, 所以最後結果為 c2=1,c3=2
Client.increment("test_increment",
"test_null",
new String[] { "c2", "c3" },
new Object[] { 1, 2 }, true );
參數說明:
tableName:表名
rowkey:主索引值
columns:自增目標列名(一列或多列)
values:目標列自增值 (一列或多列)
withResult:判斷是否返回自增結果集
Map<String, Object>:傳回值,如果 withResult = false ,返回結果為 Map.empty。
append 介面
您可使用該介面把指定列的值原子地追加某個串,使用該介面會出現以下三種情況:
計算結果溢出列類型的範圍,報錯。
目標行不存在,則插入,把增量值設定為初值(即等價於原值為空白串)。
目標行存在,但是指定列的值為 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" });
// append 以後, 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:增加串的目標列名(一列或多列)
values:目標列增加串值 (一列或多列)
withResult:判斷是否返回增加串結果集
Map<String, Object>:傳回值,如果 withResult = false ,返回結果為 Map.empty。
scan 介面
您可使用該介面進行範圍尋找,支援根據主鍵或主鍵的首碼進行範圍掃描,也可以不指定主鍵,根據索引或者索引首碼範圍進行掃描查詢,介面支援多 range 掃描和逆序掃描。
樣本如下:
// 範例
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:設定擷取結果的列,例如一張表有 4 列,column1~column4,而只需要返回 column2 這一列的資料。
addScanRange:添加尋找範圍,其中 min,max 為範圍的左右區間值。
batch_size:在滿足掃描條件的行記錄中,每一批需要返回的數量。
batch 介面
您可使用該介面批量執行多種操作組合。
樣本如下:
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();
// 上面返回結果的list, insert 返回 affectedRows, get 返回 map 結果,delete 返回 affectedRows
參數說明:
TableBatchOps:操作對象,通過 ObTableClient 對象建立,如上述的 client.batch(table_name)。
List<Object>:傳回值,包含所有操作的結果集合,如上述的 insert、get、delete。