495
windows
訂閱數據SQL封裝簡介__數據訂閱_用戶指南_數據傳輸-阿裏雲
數據訂閱SDK訂閱到的數據為DTS自定義格式,本小節簡單介紹各種類型SQL語句解析的代碼實現。
DDL解析
如果一個Record 是DDL語句,那麼這個Record 的操作類型為DDL。且DDL語句存儲在第一列的value中。具體獲取DDL語句的代碼如下:
String ddl_string;
Record.Type type=record.getOpt();
if(type.equals(Record.Type.DDL)){
List<DataMessage.Record.Field> fields = record.getFieldList();
ddl_string = fields.get(0).getValue().toString();
}
Insert 解析
如果一個Record 是Insert語句,那麼這個Record的操作類型為INSERT。具體獲取Insert完整語句的代碼如下:
StringBuilder insert_string=new StringBuilder();
Record.Type type=record.getOpt();
DataMessage.Record.Field field;
StringBuilder FieldName=new StringBuilder();
StringBuilder FieldValue = new StringBuilder();
if(type.equals(Record.Type.INSERT)){
int i=0;
List<DataMessage.Record.Field> fields = record.getFieldList();
for (; i < fields.size(); i++) {
field = fields.get(i); FieldName.append('`'+field.getFieldname().toLowerCase()+'`');
FieldValue.append(field.getValue());
if (i != fields.size() - 1) {
FieldName.append(',');
FieldValue.append(',');
}
}
insert_string.append("insert "+ record.getTablename()+"("+FieldName.toString()+") values("+FieldValue.toString()+");");
}
Update 解析
如果一個Record 是Update語句,那麼這個Record的操作類型為UPDATE。
update更新前的字段存儲在:Record.getFieldList()中索引為偶數的Field,更新後的字段值存儲在:索引為奇數的Field。
下麵的示例代碼介紹當update的表有主鍵時,獲取Insert完整語句的代碼示例:
StringBuilder update_string=new StringBuilder();
Record.Type type=record.getOpt();
DataMessage.Record.Field field;
StringBuilder SetValue = new StringBuilder();
StringBuilder WhereCondition = new StringBuilder();
String ConditionStr;
boolean hasPk=false;
boolean pkMode=false;
boolean hasSet=false;
if(type.equals(Record.Type.UPDATE)){
int i=0;
DataMessage.Record.Field OldField = null;
DataMessage.Record.Field NewField = null;
List<DataMessage.Record.Field> fields = record.getFieldList();
for (; i <fields.size() ; i++) {
if (i % 2 == 0) {
OldField = fields.get(i);
continue;
}
NewField = fields.get(i);
if (field.isPrimary()) {
if (hasPk) {
WhereCondition.append(" and ");
}
//where old value
ConditionStr = getFieldValue(OldField);
if(ConditionStr==null){ WhereCondition.append("`"+field.getFieldname().toLowerCase()+"`" + " " + "is null");
}else{
WhereCondition.append("`"+field.getFieldname().toLowerCase()+"`"+" = "+ NewField.getValue());
}
hasPk = true;
}
if (hasSet) {
SetValue.append(COMMA);
}
SetValue.append("`"+field.getFieldname().toLowerCase()+"`" + " = " + field.getValue());
String setStr = getFieldValue(field);
hasSet = true;
}
update_string.append("Update "+record.getTablename() +" Set " + SetValue + " Where "+WhereCondition +";");
}
Delete 解析
如果一個Record 是Delete語句,那麼這個Record的操作類型為DELETE。下麵的代碼示例簡單介紹當delete對應的表有主鍵時,如何獲取完整的Delete語句:
StringBuilder delete_string=new StringBuilder();
Record.Type type=record.getOpt();
DataMessage.Record.Field field;
StringBuilder FieldName=new StringBuilder();
StringBuilder FieldValue = new StringBuilder();
StringBuilder DeleteCondition = new StringBuilder();
boolean hasPk=false;
boolean pkMode=false;
if(type.equals(Record.Type.DELETE)){
int i=0;
List<DataMessage.Record.Field> fields = record.getFieldList();
delete_string.append("Delete From" + record.getTablename() + "where");
// 表是否有主鍵?
if (record.getPrimaryKeys() != null) {
pkMode = record.getPrimaryKeys().length() > 0 ? true : false;
}
for (; i < fields.size(); i++) {
if ((pkMode && !field.isPrimary())) {
continue;
}
if (hasPk) {
delete_string.append(" and ");
}
delete_string.append(field.getFieldname() + "=" + field.getValue());
hasPk = true;
}
delete_string.append(";");
}
Replace 解析
如果源庫執行了Replace語句,那麼這個Record的操作類型為UPDATE或INSERT。當replace設置的值不存在時,Record的操作類型為INSERT,當replace設置的值存在時,Record的操作類型為UPDATE。
Begin 解析
如果一個Record 是Begin語句,那麼這個Record的操作類型為BEGIN。begin語句沒有實際內容,所以不需要對Field做處理,隻需要判斷操作為begin即可,具體獲取代碼如下:
StringBuilder sql_string = new StringBuilder();
Record.Type type = record.getOpt();
if(type.equals(Record.Type.BEGIN)){
sql_string.append("Begin");
}
Commit 解析
如果一個Record 是Commit語句,那麼這個Record的操作類型為COMMIT。commit語句沒有實際內容,所以不需要對Field做處理,隻需要判斷操作為commit即可。
StringBuilder sql_string = new StringBuilder();
Record.Type type = record.getOpt();
if(type.equals(Record.Type.COMMIT)){
sql_string.append("commit");
}
最後更新:2016-11-23 16:04:15
上一篇:
SDK快速入門__數據訂閱_用戶指南_數據傳輸-阿裏雲
下一篇:
SDK示例代碼運行簡介__數據訂閱_用戶指南_數據傳輸-阿裏雲
RecordLineType__數據類型_API文檔_雲解析-阿裏雲
創建子賬號__子賬號訪問IoT_控製台使用手冊_阿裏雲物聯網套件-阿裏雲
表格存儲支持的操作__快速入門_表格存儲-阿裏雲
ApiInfo__數據類型_API_API 網關-阿裏雲
輪詢作業__SDK接口說明_Python版SDK_批量計算-阿裏雲
麵授培訓課程介紹__麵授培訓課程_上雲培訓-阿裏雲
免費項目說明__購買指南_消息隊列 MQ-阿裏雲
使用說明-python__SDK使用參考_服務器端API_阿裏雲物聯網套件-阿裏雲
運營商錯誤碼(電信)__常見問題_短信服務-阿裏雲
基於 EMR 的大數據計算__典型應用_用戶指南_雲數據庫 RDS 版-阿裏雲
相關內容
常見錯誤說明__附錄_大數據計算服務-阿裏雲
發送短信接口__API使用手冊_短信服務-阿裏雲
接口文檔__Android_安全組件教程_移動安全-阿裏雲
運營商錯誤碼(聯通)__常見問題_短信服務-阿裏雲
設置短信模板__使用手冊_短信服務-阿裏雲
OSS 權限問題及排查__常見錯誤及排除_最佳實踐_對象存儲 OSS-阿裏雲
消息通知__操作指南_批量計算-阿裏雲
設備端快速接入(MQTT)__快速開始_阿裏雲物聯網套件-阿裏雲
查詢API調用流量數據__API管理相關接口_API_API 網關-阿裏雲
使用STS訪問__JavaScript-SDK_SDK 參考_對象存儲 OSS-阿裏雲