当前位置: 代码迷 >> SQL >> 依据用户输入查询条件的个数动态拼SQL
  详细解决方案

依据用户输入查询条件的个数动态拼SQL

热度:90   发布时间:2016-05-05 12:46:19.0
根据用户输入查询条件的个数动态拼SQL
今天终于想出了个电子把这个问题解决了。记录一下:
package com.sysnet.test;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;public class Test {	public static void main(String[] args){		TestVO vo=new TestVO();		vo.setAge(2);		vo.setName("shenzhw");		vo.setDesc("sdag");		try{			new Test().t(vo);		}catch(Exception e){			e.printStackTrace();		}	}		//要对VO中的数据类型加以判断	public void t(TestVO vo) throws NoSuchMethodException,InvocationTargetException,IllegalAccessException{		Field[] fields=vo.getClass().getDeclaredFields();		Map<String,Object> valueMap=new HashMap<String,Object>();		for(int i=0;i<fields.length;i++){			Field f=fields[i];			String name=f.getName();			String method="get" + name.substring(0, 1).toUpperCase() + name.substring(1);			Method getMethod=vo.getClass().getMethod(method, new Class[]{});			Object value=getMethod.invoke(vo, new Object[]{});						if(value!=null){				valueMap.put(name, value);			}								}		StringBuffer sql=new StringBuffer("select * from t");		if(valueMap.size()>0){			sql.append(" where ");		}		Iterator<String> iter=valueMap.keySet().iterator();		String key=iter.next();		sql.append(key + "=" + valueMap.get(key));		while(iter.hasNext()){			String k=iter.next();			sql.append(" and " + k + "=" + valueMap.get(k));		}		System.out.println(sql.toString());	}}
  相关解决方案