552
微信
單行數據操作__Java-SDK_SDK 參考_表格存儲-阿裏雲
表格存儲的 SDK 提供了 PutRow、GetRow、UpdateRow 和 DeleteRow 等單行操作的接口。
插入一行數據(PutRow)
插入數據到指定的行。
接口
/**
* 向表(Table)中插入或覆蓋一行數據。
*
* @param putRowRequest 執行PutRow操作所需參數的封裝。
* @return PutRow 操作的響應內容。
* @throws OTSException OTS訪問返回錯誤消息
* @throws ClientException 請求的返回結果無效, 或由於網絡原因請求失敗, 或訪問超時。
*/
public PutRowResult putRow(PutRowRequest putRowRequest)
throws OTSException, ClientException;
示例 1
插入一行數據
// 定義行的主鍵,必須與創建表時的TableMeta中定義的一致
RowPrimaryKey primaryKey = new RowPrimaryKey();
primaryKey.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(1));
primaryKey.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(101));
RowPutChange rowChange = new RowPutChange("SampleTable");
rowChange.setPrimaryKey(primaryKey);
// 定義要寫入改行的屬性列
rowChange.addAttributeColumn("col0", ColumnValue.fromLong(10));
rowChange.addAttributeColumn("col1", ColumnValue.fromLong(111111));
rowChange.addAttributeColumn("col2", ColumnValue.fromString("北上杭深"));
// RowExistenceExpectation.EXPECT_NOT_EXIST表示隻有此行不存在時才會執行插入
rowChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST));
try
{
// 構造插入數據的請求對象,
PutRowRequest request = new PutRowRequest();
request.setRowChange(rowChange);
// 調用PutRow接口插入數據
client.PutRow(request);
// 如果沒有拋出異常,則說明執行成功
System.out.println("Put row succeeded.");
} catch (ClientException ex) {
System.out.println("Put row failed.");
} catch (OTSException ex) {
System.out.println("Put row failed.");
}
提示:
RowExistenceExpectation.IGNORE 表示不管此行是否已經存在,都會插入新數據,如果之前有會被覆蓋。
RowExistenceExpectation.EXPECT_EXIST 表示隻有此行存在時,才會插入新數據,此時,原有數據也會被覆蓋。
RowExistenceExpectation.EXPECT_NOT_EXIST 表示隻有此行不存在時,才會插入數據,否則不執行。
詳細代碼:PutRow@GitHub。
示例 2
根據條件插入一行數據:當行存在,且 col0 小於 5,且 col2 不等於“beijing”的時候才執行插入操作。
// 定義行的主鍵,必須與創建表時的TableMeta中定義的一致
RowPrimaryKey primaryKey = new RowPrimaryKey();
primaryKey.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(1));
primaryKey.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(101));
RowPutChange rowChange = new RowPutChange("SampleTable");
rowChange.setPrimaryKey(primaryKey);
// 定義要寫入改行的屬性列
rowChange.addAttributeColumn("col0", ColumnValue.fromLong(10));
rowChange.addAttributeColumn("col1", ColumnValue.fromLong(111111));
rowChange.addAttributeColumn("col2", ColumnValue.fromString("北上杭深"));
try
{
//條件1:col0的值小於5
ColumnCondition filter1 = new RelationalCondition(
"col0",
RelationalCondition.CompareOperator.LESS_THAN,
ColumnValue.fromLong(5));
//條件2:col2不等於beijing的行
ColumnCondition filter2 = new RelationalCondition(
"col2",
RelationalCondition.CompareOperator.NOT_EQUAL,
ColumnValue.fromString("beijing"));
// 組合條件1和條件2,關係是AND
ColumnCondition cond = new CompositeCondition(CompositeCondition.LogicOperator.AND)
.addCondition(filter1).addCondition(filter2);
// RowExistenceExpectation.EXPECT_NOT_EXIST表示隻有此行不存在時才會執行後麵邏輯,否則直接返回
Condition condition = new Condition(RowExistenceExpectation.EXPECT_NOT_EXIST);
// 設置列條件,隻有col0小於5且col2不等於beijing的時候才會插入
condition.setColumnCondition(cond);
// 設置條件
rowChange.setCondition(cond);
// 構造插入數據的請求對象
PutRowRequest request = new PutRowRequest();
request.setRowChange(rowChange);
// 調用PutRow接口插入數據
client.PutRow(request);
// 如果沒有拋出異常,則說明執行成功
System.out.println("Put row succeeded.");
} catch (ClientException ex) {
// 如果拋出客戶端異常,則說明參數等有誤
System.out.println("Put row failed.");
} catch (OTSException ex) {
// 如果拋出服務器端異常,則說明請求失敗
System.out.println("Put row failed.");
}
讀取一行數據(GetRow)
根據給定的主鍵讀取單行數據。
接口
/**
* 返回表(Table)中的一行數據。
*
* @param getRowRequest 執行GetRow操作所需參數的封裝。
* @return GetRow操作的響應內容。
* @throws OTSException OTS訪問返回錯誤消息
* @throws ClientException 請求的返回結果無效, 或由於網絡原因請求失敗, 或訪問超時。
*/
public GetRowResult getRow(GetRowRequest getRowRequest)
throws OTSException, ClientException;
示例 1
讀取一行數據。
// 定義行的主鍵,必須與創建表時的TableMeta中定義的一致
RowPrimaryKey primaryKeys = new RowPrimaryKey();
primaryKeys.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(1));
primaryKeys.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(101));
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("SampleTable");
criteria.setPrimaryKey(primaryKeys);
try
{
// 構造查詢請求對象,這裏未指定讀哪列,默認讀整行
GetRowRequest request = new GetRowRequest();
request.setRowQueryCriteria(criteria);
// 調用GetRow接口查詢數據
GetRowResult result = client.getRow(request);
// 輸出此行的數據
Row row = result.getRow();
int consumedReadCU = result.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit();
System.out.println("Consumed capacity unti:" + consumedReadCU);
System.out.println("col0:" + row.getColumns().get("col0"));
System.out.println("col1:" + row.getColumns().get("col1"));
System.out.println("col2:" + row.getColumns().get("col2"));
// 如果沒有拋出異常,則說明成功
System.out.println("Get row succeeded.");
} catch (ClientException ex) {
// 如果拋出客戶端異常,則說明參數等有誤
System.out.println("Get row failed.");
} catch (OTSException ex) {
// 如果拋出服務器端異常,則說明請求失敗
System.out.println("Get row failed.");
}
提示:
查詢一行數據時,默認返回這一行所有列的數據,如果想隻返回特定行,可以通過 criteria.addColumnsToGet 接口限製,如果將 col0 和 col1 加入到 columnsToGet 中,則隻返回 col0 和 col1 的值。
查詢時也支持按條件過濾,比如當 col0 的值大於 24 時才返回結果。
當同時使用 columnsToGet 和 condition 時,順序是 columnsToGet 先生效,然後再去返回的列中進行過濾。
某列不存在時的行為,可以通過 PassIfMissing 控製。
詳細代碼:GetRow@GitHub。
示例 2
使用過濾功能讀取一行數據。
下麵演示查詢數據,在 col0 和 col2 上麵過濾,隻有滿足條件是 col0 等於24,或者 col2 不等於“chengdu”的列才會返回。
// 定義行的主鍵,必須與創建表時的TableMeta中定義的一致
RowPrimaryKey primaryKeys = new RowPrimaryKey();
primaryKeys.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(1));
primaryKeys.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(101));
SingleRowQueryCriteria criteria = new SingleRowQueryCriteria("SampleTable");
criteria.setPrimaryKey(primaryKeys);
try
{
//條件1:col0的值等於24
ColumnCondition filter1 = new RelationalCondition(
"col0",
RelationalCondition.CompareOperator.EQUAL,
ColumnValue.fromLong(24));
//條件2:col2不等於chengdu的行
ColumnCondition filter2 = new RelationalCondition(
"col1",
RelationalCondition.CompareOperator.NOT_EQUAL,
ColumnValue.fromString("chengdu"));
// 組合條件1和條件2,關係是OR
criteria.setFilter(new CompositeCondition(CompositeCondition.LogicOperator.OR)
.addCondition(filter1).addCondition(filter2));
// 構造查詢請求對象,這裏未指定讀哪列,默認讀整行
GetRowRequest request = new GetRowRequest();
request.setRowQueryCriteria(criteria);
// 調用GetRow接口查詢數據
GetRowResult result = client.getRow(request);
// 輸出此行的數據
Row row = result.getRow();
int consumedReadCU = result.getConsumedCapacity().getCapacityUnit().getReadCapacityUnit();
System.out.println("Consumed capacity unti:" + consumedReadCU);
System.out.println("col0:" + row.getColumns().get("col0"));
System.out.println("col2:" + row.getColumns().get("col2"));
// 如果沒有拋出異常,則說明成功
System.out.println("Get row succeeded.");
} catch (ClientException ex) {
// 如果拋出客戶端異常,則說明參數等有誤
System.out.println("Get row failed.");
} catch (OTSException ex) {
// 如果拋出服務器端異常,則說明請求失敗
System.out.println("Get row failed.");
}
更新一行數據(UpdateRow)
更新指定行的數據,如果該行不存在,則新增一行;若該行存在,則根據請求的內容在這一行中新增、修改或者刪除指定列的值。
接口
/**
* 更新表的讀或寫CapacityUnit。
*
* @param updateTableRequest 執行UpdateTable操作所需參數的封裝。
* @return UpdateTable操作的響應內容。
* @throws OTSException OTS訪問返回錯誤消息
* @throws ClientException 請求的返回結果無效, 或由於網絡原因請求失敗, 或訪問超時。
*/
public UpdateTableResult updateTable(UpdateTableRequest updateTableRequest)
throws OTSException, ClientException;
示例
更新一行數據。
// 定義行的主鍵,必須與創建表時的TableMeta中定義的一致
RowUpdateChange rowChange = new RowUpdateChange("SampleTable");
RowPrimaryKey primaryKeys = new RowPrimaryKey();
primaryKeys.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(1));
primaryKeys.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(101));
rowChange.setPrimaryKey(primaryKeys);
// 定義要寫入改行的屬性列
rowChange.addAttributeColumn("col0", ColumnValue.fromLong(99));
rowChange.addAttributeColumn("col2", ColumnValue.fromString("京滬杭深"));
// 刪除col1
rowChange.deleteAttributeColumn("col1");
rowChange.setCondition(new Condition(RowExistenceExpectation.EXPECT_EXIST));
try
{
// 構造更新行的請求對象
UpdateRowRequest request = new UpdateRowRequest();
request.setRowChange(rowChange);
// 調用UpdateRow接口執行
client.updateRow(request);
// 如果沒有拋出異常,則說明執行成功
System.out.println("Update row succeeded.");
} catch (ClientException ex) {
// 如果拋出客戶端異常,則說明參數等有誤
System.out.println("Update row failed.");
} catch (OTSException ex) {
// 如果拋出服務器端異常,則說明請求失敗
System.out.println("Update row failed.");
}
提示:
更新一行數據也支持條件語句。
詳細代碼:UpdateRow@GitHub。
刪除一行數據(DeleteRow)
接口
/**
* 刪除表(Table)中的一行數據。
*
* @param deleteRowRequest 執行DeleteRow操作所需參數的封裝。
* @return DeleteRow操作的響應內容。
* @throws OTSException OTS訪問返回錯誤消息
* @throws ClientException 請求的返回結果無效, 或由於網絡原因請求失敗, 或訪問超時。
*/
public DeleteRowResult deleteRow(DeleteRowRequest deleteRowRequest)
throws OTSException, ClientException;
示例
刪除一行數據。
// 要刪除的行的PK列分別為0和100
RowDeleteChange rowChange = new RowDeleteChange("SampleTable");
RowPrimaryKey primaryKeys = new RowPrimaryKey();
primaryKeys.addPrimaryKeyColumn("pk0", PrimaryKeyValue.fromLong(0));
primaryKeys.addPrimaryKeyColumn("pk1", PrimaryKeyValue.fromLong(100));
rowChange.setPrimaryKey(primaryKeys);
try
{
// 構造請求
DeleteRowRequest request = new DeleteRowRequest();
request.setRowChange(rowChange);
// 調用DeleteRow接口執行刪除
client.deleteRow(request);
// 如果沒有拋出異常,則表示成功
System.out.println("Delete table succeeded.");
} catch (ClientException ex) {
// 如果拋出客戶端異常,則說明參數等有誤
System.out.println("Delete row failed.");
} catch (OTSException ex) {
// 如果拋出服務器端異常,則說明請求失敗
System.out.println("Delete row failed.");
}
提示:
刪除一行數據也支持條件語句。
詳細代碼:DeleteRow@GitHub。
最後更新:2016-11-23 16:04:09
上一篇:
UpdateRowInBatchWriteRowRequest__DataType_API 參考_表格存儲-阿裏雲
下一篇:
多行數據操作__Java-SDK_SDK 參考_表格存儲-阿裏雲
批量刪除消息__隊列接口規範_API使用手冊_消息服務-阿裏雲
配置數據導入任務__基礎示例—完整數據開發_場景教程_大數據開發套件-阿裏雲
獲取應用列表__應用管理類 API_Open API 參考_企業級分布式應用服務 EDAS-阿裏雲
修改實例描述__實例管理_開放API_分布式關係型數據庫 DRDS-阿裏雲
開發準備___開發人員指南_E-MapReduce-阿裏雲
Array數組類型說明__功能篇_最佳實踐_開放搜索-阿裏雲
EDAS 產品係列__產品係列及發行說明_企業級分布式應用服務 EDAS-阿裏雲
視頻轉碼回調消息講解___視頻專區_媒體轉碼-阿裏雲
獲取訪問者真實IP___常見接入問題_Web 應用防火牆-阿裏雲
計費問題__計量計費_彈性伸縮-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲