任意一条查询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";
	  }
  }
时间: 2024-09-29 05:49:12

任意一条查询sql转换为查询结果集对应的数目的相关文章

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

原思路: 像括号配对一样,假设遇见select 就入栈,假设遇见from就出栈,直到栈为空,取得此时的位置.进行字符串截取. 实现方法:遇见字符s而且连续后5个字符elect 就+1,遇见字符f而且连续3个字符为rom就-1,当计数器结果为0时,返回当前字符的位置,然后进行字符串截取就可以: /**** * 获取截取位置 * @param selectSQL * @return */ public static int getSubIndex(String selectSQL){ System.

sql主表分页查询关联子表取任意一条高效方案

有个业务场景,主表中一条数据,在子表中有多条详情数据.对数据进行展示的时候,产品希望随意拿一条子表的数据关联展示出来,用了很多方案,但是都不够好. sql查询取子表任意一条,多个字段的方案 最终找到一个高效的方案记录如下: 需求如图: 最早的第一套方案: select distinct A.ID, A.Title, A.[Description], A.xx1, A.xx2, A.xx3, B.ID as BId, B.xxA, B.xxB, B.xxC, B.xxD from A left j

新建一个索引能够同时提升三条SQL的查询性能

如题 CREATE TABLE `score` (   `id` int(11) NOT NULL,   `studentid` int(11) NOT NULL,   `subjectid` int(11) NOT NULL,   `score` int(11) NOT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 新建一个索引能够同时提升三条SQL的查询性能 ALTER TABLE `score` AD

Oracle取查询结果数据的第一条记录SQL

Oracle取查询结果数据的第一条记录SQL: select * from (select * from <table> order by <key>) where rownum=1; select * from (select * from <table> order by <key> desc) where rownum=1;

[Oracle系列整理01]PL/SQL 基本查询与排序

本课重点:    1.写SELECT语句进行数据库查询    2.进行数学运算    3.处理空值    4.使用别名ALIASES    5.连接列    6.在SQL PLUS中编辑缓冲,修改SQL SCRIPTS    7.ORDER BY进行排序输出.    8.使用WHERE 字段. 一.写SQL 命令:      不区分大小写.      SQL 语句用数字分行,在SQL PLUS中被称为缓冲区.      最后以:或 / 结束语句.      也可以用RUN来执行语句 二.例1:

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

SQL高级查询技巧

1.UNION,EXCEPT,INTERSECT运算符 A,UNION 运算符 UNION 运算符通过组合其他两个结果表(例如 TABLE1 和 TABLE2)并消去表中任何重复行而派生出一个结果表. 当 ALL 随 UNION 一起使用时(即 UNION ALL),不消除重复行.两种情况下,派生表的每一行不是来自 TABLE1 就是来自 TABLE2. B, EXCEPT 运算符 EXCEPT 运算符通过包括所有在 TABLE1 中但不在 TABLE2 中的行并消除所有重复行而派生出一个结果表

SQl语句查询性能优化

[摘要]本文从DBMS的查询优化器对SQL查询语句进行性能优化的角度出发,结合数据库理论,从查询表达式及其多种查询条件组合对数据库查询性能优化进行分析,总结出多种提高数据库查询性能优化策略,介绍索引的合理建立和使用以及高质量SQL查询语句的书写原则,从而实现高效的查询,提高系统的可用性. [关键词]SQL查询语句,索引,性能优化 1.引言 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,索引的运用与复杂视图的编写等体会不出SQL语句各种写法的性能优劣,但是应用系统实际应用后,随

基本的查询sql语句

day03  基本的查询sql语句 一.概述: 学习MySQL数据库中一定要学会sql的查询功能,说白了,使用数据库就是存储数据,查询数据,使用这些数据的一个过程.只有查看了才知道我们是否存储成功,是否可以直接使用这些数据. 二.具体的sql 1.查询数据库的基本语法:         select 需要查询的字段名和内容         from  指定相关的表名         where  查询时所需要的条件         group by  如何对结果分组         order