需求:从sql文件中读取sql脚本并使用 java读取sql脚本中的输入表(二)--读取sql脚本中的输入表

要完成表的读取我觉得首先得去分析你的sql脚本里面涉及的输入表的情况,在以下的脚本里能够读出的输入表类型主要有以下两种:

from D d,

from E e,F f,G g

from A a left join (select * from table ) b on left join C c on ... where a.no=(select * from H h left join I i on)

输出:以上涉及到的所有的表,包括子查询里的表

缺点:不能输出在动态sql中进行拼接的表,即在前面给定了参数值,后面进行拼接的情况,后面可能会有补充

目前只碰到了这些情况,若还有其他情况请指出

	//获取输入表
    public static List<String> get_in_table(String str){
    	
        List<String> list=new ArrayList<String>();;
        str=str.replaceAll("delete from ", "delete");//delete from后面的表为输入表,先剔除
        String[] split = str.split("from ");
    	for (int k=1;k<split.length;k++) {
    		String s1 = split[k].substring(0, split[k].indexOf(" "));
    		list.add(s1);
    		if(split[k].indexOf("on ")>0 && split[k].indexOf("join ")>0){	
    		list=getJoin2(list,split[k]);
    		}
    		if(split[k].indexOf(" on ")>0 && split[k].indexOf("join ")==-1){
    			String string=split[k].substring(0,split[k].indexOf(" on "));
    			list=gettable3(list,string);
    		}   		
    	}
    		for(String l:list){
    			System.out.println(l);
    		}
          	return list;
    	    }        
     
    public static List<String> getJoin2(List<String> list,String s){
    	if(s.indexOf("on ")>0 && s.indexOf("join ")>0){
 
    		String s1=s.substring(s.indexOf("join ")+5);
			String string=s1.substring(0, s1.indexOf(" "));
			getJoin2(list,s.substring(s1.indexOf(" on ")));
			
			list.add(string);
		}
    	return list;
    }
    public static List<String> gettable3(List<String> list,String s){
    	if(s.indexOf(",")>0){
    	s=s.substring(s.indexOf(","),s.indexOf(" "));
    	gettable3(list,s.substring(s.indexOf(" ")));
    	}
    	return list;
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值