编辑代码

import java.util.regex.*;
class Main {
	public static void main(String[] args) {
        //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。
        String execshql=null;
		System.out.println("Hello world!   - java.jsrun.net ");
        String tableName = "ydjc_yw_checktask ydjc " +
					"left join Cod_Region c on ydjc.checkarea = c.code " +
					"left join sys_user s on ydjc.createuser = s.userid ";
                            String str = "kkskksfhdf";
       
        String addWhere = "1=1 and  rwtype='0' order by createtime desc";
        String fields = "ydjc.pkid,ydjc.checktaskname,ydjc.checktype,c.name checkarea," +
					"ydjc.checktype as checktypecode,ydjc.rwjcdx,ydjc.rwjcdx as dxcode," +
					"checkcontext,to_char(ydjc.checkdate,'yyyy-mm-dd') as checkdate," +
					"to_char(ydjc.checkenddate,'yyyy-mm-dd') as checkenddate,"+
					"ydjc.taskstatus,s.username,to_char(ydjc.createtime,'yyyy-mm-dd hh24:mi:ss') as createuser";
        String zsdm = "530600";
        String pattern = "(?i).*cod_region.*";
		execshql="select "+fields;
			if (tableName!=null && !"".equals(tableName)){
				execshql+=" from "+tableName;
			}



        boolean isMatch = Pattern.matches(pattern, tableName);
        if(isMatch) {
            //先将条件转大写
            String content = tableName.toUpperCase();
            //取出区域表开始出现的index
            int index = content.indexOf("COD_REGION");
            //取出区域表 别名
            String bm = getFirstNonWhitespaceChar(content.substring(index+10,index+15));
            System.out.println("区域代码表别名:"+bm);
            //条件是否为空 
            if(addWhere!=null && !"".equals(addWhere) && !"null".equals(addWhere)){
                String patterns = "(?i).*"+bm+".code.*";
                boolean isMatchs = Pattern.matches(patterns, addWhere);
                if(!isMatchs){
                    String a = bm+".code='" + zsdm + "' and ";
                    addWhere = a + addWhere;
                }
                execshql = addWheres(execshql, addWhere);
            }else {
                addWhere=bm+".code='" + zsdm + "'";
                //execshql = addWheres(execshql, addWhere);
            }
            System.out.println("查询条件:"+addWhere);
            System.out.println("查询语句:"+execshql);
        }
  
	}

     private static String getFirstNonWhitespaceChar(String input) {
        if (input == null || input.length() == 0) {
            return "";
        }
        char firstChar = input.charAt(0);
        if (!Character.isWhitespace(firstChar)) {
            return String.valueOf(firstChar);
        } else {
            return getFirstNonWhitespaceChar(input.substring(1));
        }
    } 

    private static String addWheres(String execshql, String searchWhere) {
		//可能存在这样的sql语句 select a,(select a from b where c=d) as e from f where g in ( select g from h where j=h)
		System.out.println("查询语句:"+execshql);
        String toLowerExecshql=execshql.toLowerCase();
		int start=0;
		int indexSelect=toLowerExecshql.indexOf("select ");
		while(true){
			int otherSelect=toLowerExecshql.indexOf("select ",indexSelect+6);
			if(otherSelect<0){//不存在其他select关键字了
				start=indexSelect;
				break;
			}
			int indexFrom=toLowerExecshql.indexOf(" from ",indexSelect+6);
			if(indexFrom<otherSelect){//存在主条件中的select关键字
				start=indexFrom;
				break;
			}
			indexSelect=indexFrom;
		}
		start=toLowerExecshql.indexOf("from ",start+6);//得到主select的from的位置
		//有可能存在这样的  select* from f left join (select * from dd where ..) on a=b where g in ( select g from h where j=h)
		int lastIndexOn=toLowerExecshql.lastIndexOf(" on ");
		if(lastIndexOn<0)lastIndexOn=toLowerExecshql.lastIndexOf(" on(");
		if(lastIndexOn>start)start =lastIndexOn;
		
		int indexWhere =toLowerExecshql.indexOf(" where ",start);
		int indexGroup =toLowerExecshql.indexOf(" group ",start);
		int indexOrder =toLowerExecshql.indexOf(" order ",start);
		
		if(searchWhere!=null && !"".equals(searchWhere)){//查询条件不为空则添加查询条件
			int startindex=indexWhere+1;
			if(startindex<=0){//如果where关键字不存在
				if(indexGroup>=0 && indexOrder>=0){//如果order和group两个关键字都存在,取前面的
					startindex=Math.min(indexGroup+1, indexOrder+1);
				}else if(indexGroup>=0 || indexOrder>=0){//否则取存在的一个,如果都不存在startindex此时还为-1
					startindex=(indexGroup>=0?indexGroup:indexOrder)+1;
				}
				
				if(startindex>0){
					//存在order 或group 关键字
					execshql=execshql.substring(0,startindex)+ " where "+
					searchWhere+" "+execshql.substring(startindex);
				}else{
					//不存在 where order group 关键字
					execshql=execshql+" where "+searchWhere;
				}
			}else{
				//存在where关键字
				execshql=execshql.substring(0,startindex+6)+ 
					"("+searchWhere+") and "+
					execshql.substring(startindex+6);
			}
		}
		return execshql;
	}
}