要完成表的读取我觉得首先得去分析你的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;
}