查询逻辑表达式:(1+2),3 表达式1查询条件 1:a0123='回族' 表达式2
2:a0134='女'
3:a0135='已婚'我现在要把 表达式一中的数字,替换为相对应的查询条件,但是在替换2的时候会把 字段里面的数字2也给替换了,
不知道有没有更好的实现
2:a0134='女'
3:a0135='已婚'我现在要把 表达式一中的数字,替换为相对应的查询条件,但是在替换2的时候会把 字段里面的数字2也给替换了,
不知道有没有更好的实现
解决方案 »
- ajax提交servlet后等待页面!!!
- Spring2.0申明事务或配置一个切面的时候总是抛出入下的异常,请大家帮忙看下!
- 关于从hibernate二级缓存load多条数据的问题
- 关于ajax
- 这样的效果如何实现!国家与省的及联更新问题!
- 如何使用SmartUpload组件直接上传图片到数据库
- 表格的取值
- 有没有人用过KindEditor ??
- JSP如何学习
- jsp中调用javabean时出现“不能创建bean的错误"
- facletes页面的问题
- resin 3.1 一个奇怪的页面报 com.caucho.java.JavaCompileException: D? 和 java.lang.OutOfMemoryError: Java heap
之后在替换为 相应的查询条件, 但是字段里又包含数字,真是头疼
用spring的simplejdbctemplate 的话 sql语句里面可以输入参数的关键要整理出一个 比较完整的逻辑 最好是用户和数据库兼容的
如果不能整理成一个 那就分为客户的和 数据库的 然后自己转换下
查询逻辑表达式:(1+2),3 表达式1//这句是查询对象查询条件: 表达式2 //这句是查询条件
1:a0123='回族'
2:a0134='女'
3:a0135='已婚'
问题:
现在LZ想实现的是将表达式1中的1,2,3用表达式2中的查询条件替换,意思就是说将
“(1+2),3”替换成“(a0123='回族'+a0134='女'),a0135='已婚'”
页面上传递参数的时候 修改为查询字符串,
最后把 sql 字符串 连接起来!~~
传参数的时候 就修改成你需要的数字
不要传过去了 再替换!~~
代码如下: /**
* 根据json查询 条件拼装 sql 查询条件
* @param mainTab 查询的主表名称
* @param mianPk 主键(只能有一个,并且主附表都包含的)
* @param condtion 查询条件
* @param logicCondition 查询的逻辑条件
* @return
*/
public String getSearchCondition(String condtion,String logicCondition,String mainTab,String mianPk)
{
String sql="";
try { if(!"".equals(condtion)&&!"".equals(logicCondition)&&!"".equals(mainTab))
{
/*保存表的集合*/ List<String> tabNameList=new ArrayList<String>();
org.json.JSONArray jsaArray=new org.json.JSONArray(condtion);
String saveLogicContion=""; List<String> indexList=new ArrayList<String>();
List<String> valueList=new ArrayList<String>();
for(int i=0;i<logicCondition.length();i++)
{
char tempChar=logicCondition.charAt(i);
if(tempChar>='0'&&tempChar<='9')
{
/*记录数字的索引下标*/
indexList.add(i+"");
valueList.add(tempChar+"");
}
}
for(int i=0;i<indexList.size();i++)
{
String str="";
String loigcNumber=valueList.get(i);
if(i==0)
{
/*取出第一个字符*/
str=logicCondition.substring(0,Integer.valueOf(indexList.get(i)));
}
else
{ int tempNumber=Integer.valueOf(indexList.get(i-1))+1;
str=logicCondition.substring(tempNumber,Integer.valueOf(indexList.get(i)));
}
for(int k=0;k<jsaArray.length();k++)
{
JSONObject jObject=jsaArray.getJSONObject(k);
String logic=String.valueOf(jObject.get("logic"));
String tabname=String.valueOf(jObject.get("tabname"));
String fielName=String.valueOf(jObject.get("fielName"));
String seDenotation=String.valueOf(jObject.get("seDenotation"));
String filevalue=String.valueOf(jObject.get("filevalue"));
String params=String.valueOf(jObject.get("params"));
String tempStr=tabname+"."+fielName+seDenotation+"'"+filevalue+"' ";
if(!tabNameList.contains(tabname))
{
tabNameList.add(tabname);
}
if(loigcNumber.equals(logic))
{
saveLogicContion+=str+tempStr;
break;
}
}
}
/*此种情况适用于 (1+2),(1+3) or (1+2),3,*/
int logicLenth=logicCondition.length()-1;
int tempIndex=Integer.valueOf(indexList.get(indexList.size()-1));
if(tempIndex!=logicLenth)
{
String tempStr=String.valueOf(logicCondition.charAt(logicLenth));
if(")".equals(tempStr))
{
saveLogicContion+=tempStr;
}
} String newCon=saveLogicContion.replace("-"," and ");
String newCon2=newCon.replaceAll(","," or ");
String tabName="";
for(int i=0;i<tabNameList.size();i++)
{
String tab=tabNameList.get(i);
tabName+=tab;
// mainCondition+=mainTab+"."+mianPk+"="+tab+"."+mianPk;
if(tabNameList.size()>=2&&i!=tabNameList.size()-1)
{
tabName+=",";
//mainCondition+=" and ";
}
}
//sql=tabName+"-"+newCon2+"-"+mainCondition;
sql=tabName+"-"+newCon2;
}
} catch (Exception e) {
e.printStackTrace();
}
return sql;
}