组装sql关联查询的sql语句中查询条件是根据现实的sql类型,是不是应该根据控件类型
我的分析过程如下:
public static String getWhere(Controller c, List eis, List parmList, String where) { ... 这里要根据data_type组装sql,根据控件类型导致数字类型的关联查询错误 // 文本类型查询条件为模糊匹配 if (ei.getStr("type").equals(MetaField.TYPE_TEXT) || ei.getStr("type").equals(MetaField.TYPE_TEXTS)) { sb.append(" and " + key + " like ?"); parmList.add("%" + value + "%"); } else if (ei.getStr("type").equals(MetaField.TYPE_TIME)) { if (xx.isOracle()) { sb.append(" and " + key + " >= to_date(?,'yyyy-mm-dd') and " + key + " < to_date(?,'yyyy-mm-dd')+1"); } else { sb.append(" and date(" + key + ") >= ? and date(" + key + ") <= ?"); } parmList.add(startTime); parmList.add(endTime); } else { if (ei.getBoolean("is_multiple")) { // 多值条件 sb.append(" and ("); for(String val : value.split(",")){ if (!sb.toString().endsWith(" (")) { sb.append(" or "); } sb.append(key + " like "); sb.append("?"); parmList.add('%' + val + '%'); } sb.append(")"); } else { // 单值条件 sb.append(" and " + key + " = ?"); parmList.add(value); } } // 保持条件值回显 ei.put("value", value); } // 动态解析变量和逻辑运算 Object obj = c.getSessionAttr(EovaConst.USER); return DynamicParse.buildSql(sb.toString(), obj/*c.getSessionAttr(EovaConst.USER)*/); }
Eova V1.6已经重构了这块,会引入字段的数据类型可实现更精准的查询条件!
//临时解决方案 //文本类型查询条件为模糊匹配 if (ei.getStr("data_type").equals(MetaField.DATATYPE_STRING)) { sb.append(" and " + key + " like ?"); parmList.add("%" + value + "%"); } else if (ei.getStr("data_type").equals(MetaField.DATATYPE_TIME)) { if (xx.isOracle()) { sb.append(" and " + key + " >= to_date(?,'yyyy-mm-dd') and " + key + " < to_date(?,'yyyy-mm-dd')+1"); } else { sb.append(" and date(" + key + ") >= ? and date(" + key + ") <= ?"); } parmList.add(startTime); parmList.add(endTime); } else { //对于多个值判断这块也有问题,对于字符串类型和数字类型都可能会有多个值,暂时没用到,暂不不修改 if (ei.getBoolean("is_multiple")) { // 多值条件 sb.append(" and ("); for(String val : value.split(",")){ if (!sb.toString().endsWith(" (")) { sb.append(" or "); } sb.append(key + " like "); sb.append("?"); parmList.add('%' + val + '%'); } sb.append(")"); } else { // 单值条件 sb.append(" and " + key + " = ?"); parmList.add(value); } }