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的值小於5ColumnCondition 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,關係是ANDColumnCondition 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的值等於24ColumnCondition 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,關係是ORcriteria.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("京滬杭深"));// 刪除col1rowChange.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和100RowDeleteChange 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-阿裏雲