目前需要做一个sql组合查询,查询条件中包括and、or、左括号、右括号。
其中 and、or由数组String[] logic = { "and", "or", "and", "or" };传入 其中 logic[1]="and"; logic[i]可能为and 或 or
    左括号由数组String[] lkh = { "", "(", "", "" };传入 其中可能是"(",""。
    右括号由数组String[] rkh = { "", "", ")", "" };传入 其中可能是")",""。
目前需要组合sql语句的where部分,请高手执教。public static void main(String[] args) { String[] logic = { "and", "or", "and", "or" };
String[] lkh = { "", "(", "", "" };
String[] rkh = { "", "", ")", "" }; String left = "( ";
String right = " )"; StringBuffer sb = new StringBuffer(); boolean isor = false;
boolean islkh = false;
boolean isrkh = false;
int sblong = 0;
for (int i = 0; i < logic.length; i++) {
// 判断
if (logic[i].equals("or"))
isor = true;
else
isor = false;
if (lkh[i].equals("("))
islkh = true;
else
islkh = false;
if (rkh[i].equals(")"))
isrkh = true;
else
isrkh = false; sb.append(" " + logic[i] + " ");
if (!isor && islkh) {// and hava left
sb.append(left);
}
if (!isor && !islkh) {// and noe left
sb.append("");
}
if (isor && islkh) {// or have left
sb = new StringBuffer(sb.substring(0, sblong) + left + left
+ sb.substring(sblong));
}
if (isor && !islkh) {// or not left
sb = new StringBuffer(sb.substring(0, sblong) + left
+ sb.substring(sblong));
}
sblong = sb.length();
System.out.println(sb.length());
// 查询条件
sb.append("1=1"); if (!isor && isrkh) {// and hava right
sb.append(right);
}
if (!isor && !isrkh) {// and noe right
sb.append("");
} if (isor && isrkh) {// or have right
sb = sb.append(right + right);
}
if (isor && !isrkh) {// or not right
sb = sb.append(right);
}
}
System.out.println(sb.toString());
}上面写的总不符合要求,请高手执教
    

解决方案 »

  1.   

    直接把SQL打印出来看是哪里的问题就可以了。或者单步调试。看每个变量的值。
      

  2.   

    logic 传进来的长度不能够确定。
      

  3.   

    你可以把出错的SQL语句打印出来看哪里错了,如果不明白哪里有问题就把SQL语句贴上来。
      

  4.   


    String[] logic = { "and", "and", "and", "or" };
    String[] lkh = { "", "(", "", "" };
    String[] rkh = { "", "", ")", "" };
    运行出来为: and 1=1 and ( 1=1 and ( 1=1 ) or 1=1 )
    我实际需要 and 1=1 and ( 1=1 and ( 1=1 or 1=1 ) )若
    String[] logic = { "and", "or", "and", "or" };
    String[] lkh = { "", "(", "", "" };
    String[] rkh = { "", "", ")", "" };
    运行出来为:  and ( ( 1=1 or 1=1 ) and ( 1=1 ) or 1=1 )
    我实际需要  and ( ( ( 1=1 or 1=1 ) and  1=1 ) or 1=1 )总之需要符合括号匹配和查询的and、or条件!