多重子查询提取每次子查询的SQL语句

        之前用的oracle大型数据库,写的sql都是依据oracle的。移动端部分用的不能是oracle数据库,只能采用小型数据库,现场采用db2。
        db2大小只能论k为单位,很多基本的sql语法都不支持,尤其多重子查询就不支持,做试验报告的阀值就必须得用这个子查询,没有部分只好将多重子查询提出sql,单独执行。
        提取多重子查询的方法倒是不复杂,就是对sql语句循环处理,判断是否含有多个select关键字,如果有从字符串最后一个select处理,截取sql语句,执行,然后将查询的结果替换原先的sql语句,直到循环判断sql语句中只有一个select关键字。
         关键部分的代码:
         int  lastSelectNo  =   0 ;
        
int  size  =   0 ;
        
        
if  (sqlString.split( " select " ).length  -   1   >   0 )
            size 
=  sqlString.split( " select " ).length  -   1 ;
        
else   if  (sqlString.split( " SELECT " ).length  -   1   >   0 )
            size 
=  sqlString.split( " SELECT " ).length  -   1 ;

        String[] sql 
=   new  String[size];

        
while  (isHaveTwoSelect(sqlString))
        
{
            lastSelectNo 
= sqlString.lastIndexOf("select");
            
if (lastSelectNo == 0)
                lastSelectNo 
= sqlString.lastIndexOf("SELECT");

            
char beforeLast = sqlString.charAt(lastSelectNo - 1);
            
if (beforeLast == '(')
            
{
                
int k = 5;
                String string 
= sqlString.substring(lastSelectNo).substring(0, k);
                
while (!IsMatching(string))
                
{
                    k
++;
                    string 
= sqlString.substring(lastSelectNo).substring(0, k);
                }

                sql[size 
- 1= string.substring(0, k - 1);
                sqlString 
= replace(sqlString, sql[size - 1].toString(), "sql[" + (size - 1+ "]");
                size
--;
            }
//if(befor            
        }

        sql[
0 =  sqlString;

      问题是:对于select关键字的处理,目前只知道全是小写select或是全是大写SELECT,实际中select关键字这个不考虑大小写限制,我这边还尚未进行校验,一是比较麻烦二是尚未发现好的方法,目前就是对select关键字依次判断是否是s e l e c t几个字符 ,不考虑大小写。
     大家如果有好的处理select关键字方法,欢迎得道你的支持。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值