当前位置: 代码迷 >> SQL >> 随意一条查询sql转换为查询结果集对应的数目
  详细解决方案

随意一条查询sql转换为查询结果集对应的数目

热度:16   发布时间:2016-05-05 11:29:39.0
任意一条查询sql转换为查询结果集对应的数目

原思路: 像括号配对一样,如果遇见select 就入栈,如果遇见from就出栈,直到栈为空,取得此时的位置,进行字符串截取。

实现方法:遇见字符s并且连续后5个字符elect 就+1,遇见字符f并且连续3个字符为rom就-1,当计数器结果为0时,返回当前字符的位置,然后进行字符串截取即可:

 /****   * 获取截取位置   * @param selectSQL   * @return   */  public static  int   getSubIndex(String  selectSQL){		System.out.println(selectSQL.length());		int count = 0;		for(int i=0;i<selectSQL.length();i++){ 			char  c = selectSQL.charAt(i);			if(c =='s'){				if(selectSQL.charAt(i+1)=='e'&&selectSQL.charAt(i+2)=='l'&&				   selectSQL.charAt(i+3)=='e'&&selectSQL.charAt(i+4)=='c'&&				   selectSQL.charAt(i+5)=='t'){					count++;					i=i+5;				}else{					continue;				}			}else if(c =='f'){				if(selectSQL.charAt(i+1)=='r'&&selectSQL.charAt(i+2)=='o'&&				   selectSQL.charAt(i+3)=='m'){	                count--;	                i=i+3;	            	System.out.println(count);	    			if(count == 0){	    				System.out.println(i);	    				return i+1;	    			}				}else{					continue;				}			}else {				continue;			}				}		return -1;		  }

进行字符截取操作:

  /**   * 进行字符串截取   * @param inSQL   * @return   */  public static  String   getOutSQL(String inSQL){	  int  index = getSubIndex(inSQL);	  if(index != -1){		  String outSQL  = "select count(-1) from " + inSQL.substring(index);		  return outSQL;	  }else{		  System.out.println("not a  corrent sql");		  return  "not a corrent sql";	  }	  }



  相关解决方案