解析SQL语句中的WHERE条件。

privatestaticfinalString[]DEFINE_STRING=...{"and(","or(","and(","or(","and","or"};

privateStringparseNode(ElementelParent,StringsNode,StringsRelation)...{
ListlstRemenber=newArrayList();
if(sNode.trim().startsWith("(")&&sNode.trim().endsWith(")"))...{
StringsTempNode=sNode.trim().substring(1,sNode.trim().length()-1).trim();
if(!sTempNode.startsWith("("))...{
booleanbValid=validSql(sTempNode);
if(bValid)...{
returnparseNode(elParent,sTempNode,sRelation);
}
}else...{
returnparseNode(elParent,sTempNode,sRelation);
}
}
ElementelGroup=null;
StringsLastRelation="";
intlLastPos=0;
inti=0;
intiTimes=0;
while(i<sNode.length()-1)...{
intiStep=1;
booleanbStatus=isEvenStr(lstRemenber,sNode.substring(i,i+1));
if(i!=0&&bStatus)...{
for(intn=0;n<DEFINE_STRING.length;n++)...{
if(i<sNode.length()-DEFINE_STRING[n].length())...{
StringsTemp=sNode.substring(i,i+DEFINE_STRING[n].length());
if(sTemp.equalsIgnoreCase(DEFINE_STRING[n]))...{
iStep=sTemp.length();
if(sTemp.endsWith("("))...{
iStep--;
}
iTimes+=1;
//group-create
if(elGroup==null)...{
elGroup=createXmlNode(elParent,sNode,sRelation,true);
}
parseNode(elGroup,sNode.substring(lLastPos,i).trim(),sLastRelation);
sLastRelation=sTemp.replaceAll("/(","").trim();
lLastPos=i+iStep;
break;
}
}
}
}
i+=iStep;
}
if(iTimes==0)//normalnode
createXmlNode(elParent,sNode,sRelation,false);
else...{
//group-create
if(elGroup==null)...{
elGroup=createXmlNode(elParent,sNode,sRelation,true);
}
//
intiEndPos=sNode.length();
if(sLastRelation.endsWith("("))...{
iEndPos--;
}
parseNode(elGroup,sNode.substring(lLastPos,iEndPos),sLastRelation);
}
returnnull;
}

privatebooleanvalidSql(StringsNode)...{
//System.out.println("VALIDSQL("+(++iCount)+")::"+sNode);
try...{
ListlstRemenber=newArrayList();
inti=0;
while(i<sNode.length())...{
isEvenStr(lstRemenber,sNode.substring(i,i+1));
i++;
}
//System.out.println("VALIDSQL-RESULT::"+(lstRemenber.size()==0));
returnlstRemenber.size()==0;
}catch(Exceptionerr)...{
//System.out.println("VALIDSQL-RESULT::err-false");
returnfalse;
}
}

privatebooleanisEvenStr(ListlstRemenber,StringsStr)...{
if(sStr.equals("("))...{
lstRemenber.add(sStr);
}elseif(sStr.equals(")"))...{
lstRemenber.remove(lstRemenber.indexOf("("));
}elseif(sStr.equals("""))...{
intiPos=lstRemenber.indexOf(""");
if(iPos!=-1)...{
lstRemenber.remove(iPos);
}else...{
lstRemenber.add(""");
}
}elseif(sStr.equals("'"))...{
intiPos=lstRemenber.indexOf("'");
if(iPos!=-1)...{
lstRemenber.remove(iPos);
}else...{
lstRemenber.add("'");
}
}
returnlstRemenber.size()==0;
}
本文介绍了一种解析SQL语句中WHERE条件的方法,通过递归方式处理括号与逻辑运算符,确保SQL语句的有效性和正确性。
2082

被折叠的 条评论
为什么被折叠?



