495
群英
订阅数据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 valueConditionStr = 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-阿里云