2021SC@SDUSC
我们来继续上周的分析
@JSONField(serialize = false)
public String getBetweenString(String key, Object value, String rawSQL) throws IllegalArgumentException {
if (rawSQL != null) {
throw new UnsupportedOperationException("@raw:value 中 " + key + " 不合法!@raw 不支持 key% 这种功能符 !只支持 key, key!, key<, key{} 等比较运算 和 @column, @having !");
}
if (value == null) {
return "";
}
Logic logic = new Logic(key);
key = logic.getKey();
Log.i(TAG, "getBetweenString key = " + key);
JSONArray arr = newJSONArray(value);
if (arr.isEmpty()) {
return "";
}
return getBetweenString(key, arr.toArray(), logic.getType());
}
@JSONField(serialize = false)
public String getBetweenString(String key, Object[] values, int type) throws IllegalArgumentException {
if (values == null || values.length <= 0) {
return "";
}
String condition = "";
String[] vs;
for (int i = 0; i < values.length; i++) {
if (values[i] instanceof String == false) {
throw new IllegalArgumentException(key + "%:value 中 value 的类型只能为 String 或 String[] !");
}
vs = StringUtil.split((String) values[i]);
if (vs == null || vs.length != 2) {
throw new IllegalArgumentException(key + "%:value 中 value 不合法!类型为 String 时必须包括1个逗号 , 且左右两侧都有值!类型为 String[] 里面每个元素要符合前面类型为 String 的规则 !");
}
condition += (i <= 0 ? "" : (Logic.isAnd(type) ? AND : OR)) + "(" + getBetweenString(key, (Object) vs[0], (Object) vs[1]) + ")";
}
return getCondition(Logic.isNot(type), condition);
}
@JSONField(serialize = false)
public String getBetweenString(String key, Object start, Object end) throws IllegalArgumentException {
if (JSON.isBooleanOrNumberOrString(start) == false || JSON.isBooleanOrNumberOrString(end) == false) {
throw new IllegalArgumentException(key + "%:value 中 value 不合法!类型为 String 时必须包括1个逗号 , 且左右两侧都有值!类型为 String[] 里面每个元素要符合前面类型为 String 的规则 !");
}
return getKey(key) + " BETWEEN " + getValue(start) + AND + getValue(end);
}
这里是对SQL中 between and 语句的重载,规范了getBetweenString()的格式
整理了以下四种不合法类型
value 中 " + key + " 不合法!@raw 不支持 key% 这种功能符 !只支持 key, key!, key<, key{} 等比较运算 和 @column, @having !
value 中 value 的类型只能为 String 或 String[] !
getBetweenString(String key, Object[] values, int type)下的value 中 value 不合法!类型为 String 时必须包括1个逗号 , 且左右两侧都有值!类型为 String[]