@@ -200,14 +200,16 @@ public static String getLimitString(int page, int count) {
200200 return count <= 0 ? "" : " LIMIT " + page *count + ", " + count ;
201201 }
202202
203- /**获取筛选方法
203+ //WHERE <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
204+ /**获取WHERE
204205 * @return
205206 * @throws Exception
206207 */
207208 public String getWhereString () throws Exception {
208209 return getWhereString (getMethod (), getWhere ());
209210 }
210- /**获取筛选方法
211+ /**获取WHERE
212+ * @param method
211213 * @param where
212214 * @return
213215 * @throws Exception
@@ -221,8 +223,9 @@ public static String getWhereString(RequestMethod method, Map<String, Object> wh
221223 }
222224
223225 String whereString = " WHERE " ;
224- Object value ;
226+ boolean isFirst = true ;
225227 int keyType = 0 ;// 0 - =; 1 - $, 2 - {}
228+ Object value ;
226229 for (String key : set ) {
227230 Log .d (TAG , "getWhereString key = " + key );
228231 //避免筛选到全部 value = key == null ? null : where.get(key);
@@ -239,47 +242,40 @@ public static String getWhereString(RequestMethod method, Map<String, Object> wh
239242 } else if (key .endsWith ("{}" )) {
240243 keyType = 2 ;
241244 }
242-
243245 value = where .get (key );
246+ key = RequestParser .getRealKey (method , key , false );
244247
245- try {
246- key = RequestParser .getRealKey (method , key , false );
247- } catch (Exception e ) {
248- Log .e (TAG , "getObject getWhereString try { key = RequestParser.getRealKey(key, false);"
249- + " >> } catch (Exception e) {" );
250- e .printStackTrace ();
251- }
248+ whereString += (isFirst ? "" : " AND " ) + (key + (keyType == 1 ? " LIKE '" + value + "'" : (keyType == 2
249+ ? getRangeString (key , value ) : "='" + value + "'" ) ));
252250
253- whereString += (key + (keyType == 1 ? " LIKE '" + value + "'" : (keyType == 2
254- ? getRangeString (key , value ) : "='" + value + "'" ) ) + " AND " );
255- }
256- if (whereString .endsWith ("AND " )) {
257- whereString = whereString .substring (0 , whereString .length () - "AND " .length ());
251+ isFirst = false ;
258252 }
253+
259254 if (whereString .trim ().endsWith ("WHERE" ) == false ) {
260255 return whereString ;
261256 }
262257 }
263258 return "" ;
264259 }
265- /**where key > 'key0' and key <= 'key1' and ...
260+
261+ /**WHERE key > 'key0' AND key <= 'key1' AND ...
266262 * @param key
267263 * @param range "condition0,condition1..."
268- * @return key > 'key0' and key <= 'key1' and ...
264+ * @return key condition0 AND key condition1 AND ...
269265 */
270266 public static String getRangeString (String key , Object range ) {
271267 if (range instanceof JSONArray ) {
272268 return getInString (((JSONArray ) range ).toArray ());
273269 }
274270 if (range instanceof String ) {
275- return ((String ) range ).replaceAll ("," , " AND " + key );//非Number类型的可能需要客户端拼接成 < 'value0', >= 'value1'这种
271+ return ((String ) range ).replaceAll ("," , " AND " + key );//非Number类型需要客户端拼接成 < 'value0', >= 'value1'这种
276272 }
277273
278274 throw new IllegalArgumentException ("\" key{}\" :range 中range只能是 用','分隔条件的字符串 或者 可取选项JSONArray!" );
279275 }
280- /**where key in ('key0', 'key1', ... )
276+ /**WHERE key IN ('key0', 'key1', ... )
281277 * @param in
282- * @return in ('key0', 'key1', ... )
278+ * @return IN ('key0', 'key1', ... )
283279 */
284280 public static String getInString (Object [] in ) {
285281 String inString = "" ;
@@ -290,42 +286,92 @@ public static String getInString(Object[] in) {
290286 }
291287 return " IN (" + inString + ") " ;
292288 }
289+ //WHERE >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
293290
294291
295- /**获取筛选方法
292+ //SET <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
293+ /**获取SET
296294 * @return
295+ * @throws Exception
297296 */
298- public String getSetString () {
299- return getSetString (where );
297+ public String getSetString () throws Exception {
298+ return getSetString (getMethod (), getWhere () );
300299 }
301- /**获取筛选方法
300+ /**获取SET
301+ * @param method
302302 * @param where
303303 * @return
304+ * @throws Exception
304305 */
305- public static String getSetString (Map <String , Object > where ) {
306+ public static String getSetString (RequestMethod method , Map <String , Object > where ) throws Exception {
306307 Set <String > set = where == null ? null : where .keySet ();
307308 if (set != null && set .size () > 0 ) {
308309 if (where .containsKey (Table .ID ) == false ) {
309310 throw new IllegalArgumentException ("请设置" + Table .ID + "!" );
310311 }
311312 String setString = " SET " ;
313+ boolean isFirst = true ;
314+ int keyType = 0 ;// 0 - =; 1 - +, 2 - -
315+ Object value ;
312316 for (String key : set ) {
313317 //避免筛选到全部 value = key == null ? null : where.get(key);
314318 if (key == null || Table .ID .equals (key )) {
315319 continue ;
316320 }
317- setString += (key + "='" + where .get (key ) + "' ," );
318- }
319- if (setString .endsWith ("," )) {
320- setString = setString .substring (0 , setString .length () - 1 );
321+
322+ if (key .endsWith ("+" )) {
323+ keyType = 1 ;
324+ } else if (key .endsWith ("-" )) {
325+ keyType = 2 ;
326+ }
327+ value = where .get (key );
328+ key = RequestParser .getRealKey (method , key , false );
329+
330+ setString += (isFirst ? "" : ", " ) + (key + "=" + (keyType == 1 ? getAddString (key , value ) : (keyType == 2
331+ ? getRemoveString (key , value ) : "'" + value + "'" ) ) );
332+
333+ isFirst = false ;
321334 }
335+
322336 if (setString .trim ().endsWith ("SET" ) == false ) {
323337 return setString + " WHERE " + Table .ID + "='" + where .get (Table .ID ) + "' " ;
324338 }
325339 }
326340 return "" ;
327341 }
328342
343+ /**SET key = CONCAT (key, 'value')
344+ * @param key
345+ * @param value
346+ * @return CONCAT (key, 'value')
347+ * @throws IllegalArgumentException
348+ */
349+ public static String getAddString (String key , Object value ) throws IllegalArgumentException {
350+ if (value instanceof Number ) {
351+ return key + " + " + value ;
352+ }
353+ if (value instanceof String ) {
354+ return " CONCAT (" + key + ", '" + value + "') " ;
355+ }
356+ throw new IllegalArgumentException (key + "+ 对应的值 " + value + " 不是Number,String,Array中的任何一种!" );
357+ }
358+ /**SET key = REPLACE (key, 'value', '')
359+ * @param key
360+ * @param value
361+ * @return REPLACE (key, 'value', '')
362+ * @throws IllegalArgumentException
363+ */
364+ public static String getRemoveString (String key , Object value ) throws IllegalArgumentException {
365+ if (value instanceof Number ) {
366+ return key + " - " + value ;
367+ }
368+ if (value instanceof String ) {
369+ return " REPLACE (" + key + ", '" + value + "', '') " ;
370+ }
371+ throw new IllegalArgumentException (key + "- 对应的值 " + value + " 不是Number,String,Array中的任何一种!" );
372+ }
373+ //SET >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
374+
329375
330376 /**获取查询配置
331377 * @param table
0 commit comments