1 /**

2 * ksql工具类3 *4 */

5 public classKSQLBuilder {6 public static IMetaDataLoader metaDataLoader = null;7 public static final String splitchar = ",";//字段间 的分隔符

8 public static final String KEY_SELECT = "SELECT";9 public static final String KEY_FROM = "FROM";10 public static final String KEY_UPDATE = "UPDATE";11 public static final String KEY_INSERT = "INSERT INTO";12 public static final String KEY_VALUES = "VALUES";13 public static final String KEY_WHERE = "WHERE";14 public static final String KEY_AND = "AND";15 public static final String KEY_OR = "OR";16

17 public static voidinitInstance(Context ctx) {18 if (metaDataLoader == null) {19 if (ctx == null) {20 metaDataLoader =MetaDataLoaderFactory.getRemoteMetaDataLoader();21 } else{22 metaDataLoader =MetaDataLoaderFactory.getLocalMetaDataLoader(ctx);23 }24 }25 }26

27 /**

28 * 根据单个对象生成预编译语句使用的参数29 *30 *@paramentity31 *@paramobjVal32 *@return

33 */

34 public staticList getParams(EntityObjectInfo entity, IObjectValue objVal) {35 List params = newArrayList();36 if (entity == null) {37 entity =metaDataLoader.getEntity(objVal.getBOSType());38 }39 PropertyInfo property = null;40 String propName = "";41 PropertyCollection properties =entity.getInheritedNoDuplicatedPropertiesRuntime();42 for (int i = 0; i < properties.size(); i++) {43 property =properties.get(i);44 propName =property.getName();45 if (property instanceofLinkPropertyInfo) {46 if (objVal.getObjectValue(propName) != null) {47 params.add(objVal.getObjectValue(propName).getString("id"));//联接属性取ID

48 } else{49 params.add(null);50 }51 } else{52 params.add(objVal.get(propName));53 }54 }55 returnparams;56 }57

58 /**

59 * 根据批量的数据,构建预编译参数值60 *61 *@paramobjCols62 *@paramlist63 *@return

64 */

65 public staticList getBatchInsertParams(IObjectCollection objCols) {66 List list = newArrayList();67 if (objCols == null ||objCols.isEmpty()) {68 returnlist;69 }70 BOSObjectType bosType = objCols.getObject(0).getBOSType();71 EntityObjectInfo entity =metaDataLoader.getEntity(bosType);72 IObjectValue objVal = null;73 for (int j = 0, k = objCols.size(); j < k; j++) {74 objVal =objCols.getObject(j);75 list.add(getParams(entity, objVal));76 }77 returnlist;78 }79

80 /**

81 * 此方法适合单条数据插入使用82 *83 *@paramobjVal84 *@paramlist85 *@return

86 */

87 public staticString getInsertSQL(IObjectValue objVal, List list) {88 BOSObjectType bosType =objVal.getBOSType();89 EntityObjectInfo entity =metaDataLoader.getEntity(bosType);90 String ksql =getInsertSQL(entity);91 list.addAll(getParams(entity, objVal));92 returnksql;93 }94 public staticString getInsertSQL(BOSObjectType bosType) {95 EntityObjectInfo entity =metaDataLoader.getEntity(bosType);96 returngetInsertSQL(entity);97 }98 protected staticString getInsertSQL(EntityObjectInfo entity) {99 StringBuffer ksql = newStringBuffer();100 StringBuffer params = newStringBuffer();101 PropertyCollection properties =entity.getInheritedNoDuplicatedPropertiesRuntime();102 String[] fields =getTableFields(properties);103 ksql.append(KEY_INSERT).append(" ").append(entity.getTable().getName()).append("\n");104 ksql.append("(");105 for (int i = 0; i < fields.length; i++) {106 ksql.append(fields[i]).append(",");107 if (fields[i].equals("FID")) {108 params.append("newBosId('").append(entity.getBOSType().toString()).append("'),");109 } else{110 params.append("?,");111 }112 }113 ksql = ksql.deleteCharAt(ksql.lastIndexOf(","));114 ksql.append(")");115 params = params.deleteCharAt(params.lastIndexOf(","));116 ksql.append(KEY_VALUES).append("(").append(params.toString()).append(")");117 returnksql.toString();118 }119

120 /**

121 * 根据指定的bostype构建查询的SQL122 *123 *@parambosType124 * 实体的BOSTYpe125 *@paramfields126 * 返回查询的字段,方便在外部获取结果集数据,方法调用时传递空集合即可127 *@paramselectors128 * 指定的查询字段,经营分析中暂时用不到,以后扩展可使用129 *@return

130 */

131 public staticString getQuerySQL(BOSObjectType bosType, List fields, SelectorItemCollection selectors) {132 StringBuffer ksql = newStringBuffer();133 if (fields == null) {134 fields = newArrayList();135 }136 EntityObjectInfo entity =metaDataLoader.getEntity(bosType);137 PropertyCollection properties =entity.getInheritedNoDuplicatedPropertiesRuntime();138 String tableName =entity.getTable().getName();139 PropertyInfo property = null;140 String field = ""; //表的字段

141 String propName = "";//表字段的别名,例如 [ID] select FID AS ID

142 ksql.append(KEY_SELECT).append("\n");143 for (int i = 0, c = properties.size(); i < c; i++) {144 property =properties.get(i);145 propName =property.getName();146 if (property.getMappingField() == null ||StringUtils.isEmpty(property.getMappingField().getName())) {147 continue;148 }149 field =property.getMappingField().getName();150 ksql.append(field).append(" AS ").append(propName).append(",\n");151 fields.add(propName);152 }153 ksql = ksql.deleteCharAt(ksql.lastIndexOf(","));154 ksql.append(KEY_FROM).append("\n").append(tableName);155 returnksql.toString();156 }157

158 /**

159 * 获取更新数据的SQL160 *161 *@paramobjVal162 * 被更新的业务对象,由于更新时需要用到主键字段,所以主键不能为空163 *@paramparams164 * 参数165 *@paramupdateSelectors166 * 更新的字段167 *@throwsInvalidDAOMetaDataException168 */

169 public static String getUpdateSQL(IObjectValue objVal, List params, SelectorItemCollection updateSelectors) throwsInvalidDAOMetaDataException {170

171 StringBuffer ksql = newStringBuffer();172 if (objVal == null || objVal.getString(objVal.getPKField()) == null) {173 returnksql.toString();174 }175 String keyField =objVal.getPKField();176 String pk =objVal.getString(keyField);177

178 BOSObjectType bosType =objVal.getBOSType();179 EntityObjectInfo bo =metaDataLoader.getEntity(bosType);180 String tableName =bo.getTable().getName();181 ksql.append(KEY_UPDATE).append("\n");182 ksql.append(tableName).append("\n").append("set ").append("\n");183 for (int i = 0, fldSize = updateSelectors.size(); i < fldSize; ++i) {184 SelectorItemInfo item =updateSelectors.get(i);185 String itemName =item.getPropertyName();186 PropertyInfo fld =bo.getPropertyByNameRuntime(getFirstName(itemName));187 if (fld == null || fld.getMappingField() == null)188 continue;189 String fldName =fld.getName();190 if(fldName.equals(keyField) || fldName.equals("name")){191 continue;192 }193 String mappFld =MetaDataUtils.getColumnInfoByPropFromEntity(bo,fld).getName();194

195 ksql.append(mappFld).append("= ? ,");196 if (fld instanceofLinkPropertyInfo) {197 params.add(objVal.getObjectValue(fldName).getString("id"));198 } else{199 params.add(objVal.get(fldName));200 }201 }202 ksql = ksql.deleteCharAt(ksql.lastIndexOf(",")).append("\n");203 String keyFldName =MetaDataUtils.getColumnInfoByPropFromEntity(bo,bo.getPropertyByNameRuntime(keyField)).getName();204 ksql.append(KEY_WHERE).append(" ").append(keyFldName);205 ksql.append("= ? \n");206 params.add(pk);207 returnksql.toString();208 }209

210 /**

211 * 联接属性的处理212 *213 *@paramfullName214 *@return

215 */

216 private staticString getFirstName(String fullName) {217 if(StringUtils.isEmpty(fullName))218 return "";219 int pos = fullName.indexOf('.');220 if (pos > 0)221 return fullName.substring(0, pos);222 else

223 returnfullName;224 }225

226 /**

227 * 获取字段228 */

229 protected staticString[] getTableFields(PropertyCollection properties) {230 int count =properties.size();231 List fieldsList = newArrayList();232 PropertyInfo property = null;233 String field = "";234 for (int i = 0; i < count; i++) {235 property =properties.get(i);236 //LinkPropertyInfo

237 if (property.getMappingField() == null ||StringUtils.isEmpty(property.getMappingField().getName())) {238 continue;239 }240 field =property.getMappingField().getName();241 fieldsList.add(field);242 }243 return (String[]) fieldsList.toArray(newString[fieldsList.size()]);244 }245 }

不能bostype没有元数据异常_EAS BOS ORMapping 元数据解析示例相关推荐

  1. 不能bostype没有元数据异常_EAS BOS 开发问题集锦

    更多EAS BOS参考代码,请参考:EAS BOS参考 1:二次开发后,EAS的运行机制 (以下说明只适合于BOS6.1以后版本) BOS视图目录说明:MMEAS:EAS解决方案目录 metadata ...

  2. 不能bostype没有元数据异常_EAS系统部署常见问题FAQ.docx

    EAS系统部署常见问题FAQ 安装部署管理控制台管理控制台是用于配置EAS服务端配置参数.启停服务的一个可视化操作平台.理论上,没有管理控制台程序,EAS可以照样正常运行.但是通过管理控制台的可视化操 ...

  3. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件

    导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件 参考文章: (1)导入数据任务(id:373985)异常, 错误信 ...

  4. 由一个异常开始思考springmvc参数解析

    由一个异常开始思考springmvc参数解析 参考文章: (1)由一个异常开始思考springmvc参数解析 (2)https://www.cnblogs.com/zr520/p/5952874.ht ...

  5. 导入数据任务(id:373985)异常, 错误信息:解析导入文件错误,请检查导入文件内容,仅支持导入json格式数据及excel文件...

    小程序导入,别人导出的数据库json文件,错误信息如下: 导入数据库失败, Error: Poll error, 导入数据任务(id:373985)异常,错误信息:解析导入文件错误,请检查导入文件内容 ...

  6. mysql 数据仓库 元数据_数据仓库中的元数据管理

    1. 引言 元数据是数据仓库中的一个重要组成部分,元数据管理系统则是构建,管理,维护和使用数据仓库系统的核心部件. 2. 基础知识 2.1 元数据的定义 元数据是指来自企业内外的所有物理数据和知识,包 ...

  7. 实践数据湖iceberg 第十四课 元数据合并(解决元数据随时间增加而元数据膨胀的问题)

    系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql ...

  8. 不能bostype没有元数据异常_金蝶EAS_BOS工作笔记

    1. 发布元数据没看到代码,可能有以下原因:1.发布方案路径(src,deploy,metadate)不对 2. eas 5.4 更新数据中心报文件找不到错误:到项目目录下的runtime 下conf ...

  9. 不能bostype没有元数据异常_手把手教你用Python画个箱形图,找出“脏数据”

    导读:数据质量分析是数据挖掘中数据准备过程的重要一环,是数据预处理的前提,也是数据挖掘分析结论有效性和准确性的基础.没有可信的数据,数据挖掘构建的模型将是空中楼阁. 数据质量分析的主要任务是检查原始数 ...

最新文章

  1. 腾讯和头条,构建类脑神经元网络的两条路线之争
  2. linux git 备份迁移,linux – 从GitHub迁移到GitLab(作为POSIX环境中的遥控器)
  3. 管能做暖气管道吗_这样的暖气管道施工,标准吗
  4. docker下安装nacos 并使用mysql数据库
  5. linux vim配置c,Linux入门学习教程:GNU C及将Vim打造成C/C++的半自动化IDE
  6. spring总结(01)
  7. 【UVALive】3695 Distant Galaxy(......)
  8. android 绑定类名,Android Studio为Class跟Activity等添加注解
  9. visual studio 2010解决无法使用framework2.0、3.0、3.5方案
  10. 文本处理 - 测试一个对象是否是类字符串
  11. wincc 日报表(带注释)
  12. 上海自来水来自海上,一文掌握这类字符串的验证!
  13. 锐龙R3 4300U怎么样 相当于什么水平
  14. [C语言]实现字符串从头尾分别输出字符的动画效果
  15. FAST-LIO论文阅读
  16. 网络工程专业就业方向
  17. c语言餐厅点餐管理系统源码,C语言实现餐饮点餐管理系统.pdf
  18. 数据地图绘制工具汇总
  19. DES密码 中 S盒的代码实现
  20. 微信公众号支付WeixinJSBridge

热门文章

  1. Discuz!Q常见问题汇总
  2. 织梦网站安全防范操作
  3. 对话 Maker 多年跨界学习的斜杠青年 00
  4. python excel格式,Python 如何写入Excel格式和颜色
  5. android手机模拟器!手持4个大厂offer的我,面试真题解析
  6. 【前端库】typed.js 打字机效果
  7. 大厂裁员,小厂倒闭,程序员如何应对?
  8. Kubernetes K8S在IPVS代理模式下Service服务的ClusterIP类型访问失败处理
  9. 【JSP学习笔记】JSP session对象的应用 模拟商城购物车
  10. Autodock分子对接详细步骤