我想完整地,簡潔地使用JSqlParser解析SQL where子句。人們很容易把它解析爲單獨的條件語句,像這樣使用JSqlParser完全解析where子句
String whereClause = "a=3 AND b=4 AND c=5";
Expression expr = CCJSqlParserUtil.parseCondExpression(whereClause);
expr.accept(new ExpressionVisitorAdapter() {
@Override
public void visit(AndExpression expr) {
if (expr.getLeftExpression() instanceof AndExpression) {
expr.getLeftExpression().accept(this);
} else if ((expr.getLeftExpression() instanceof EqualsTo)){
System.out.println(expr.getLeftExpression());
}
System.out.println(expr.getRightExpression());
}
});
將產生輸出:
a=3
b=4
c=5
我想是讓左側,操作和右側每一個人表達,這樣的我可以將這些值放入一些現有的濾鏡對象中。
我知道你可以覆蓋訪問功能,像這樣每一個類型的操作:
expr.accept(new ExpressionVisitorAdapter() {
@Override
public void visit(AndExpression expr) {
if (expr.getLeftExpression() instanceof AndExpression) {
expr.getLeftExpression().accept(this);
} else if ((expr.getLeftExpression() instanceof EqualsTo)){
expr.getLeftExpression().accept(this);
System.out.println(expr.getLeftExpression());
}
expr.getRightExpression().accept(this);
System.out.println(expr.getRightExpression());
}
@Override
public void visit(EqualsTo expr) {
System.out.println(expr.getLeftExpression());
System.out.println(expr.getStringExpression());
System.out.println(expr.getRightExpression());
}
});
這將讓你的輸出:
a
=
3
a=3
b
=
4
b=4
c
=
5
c=5
但這僅涵蓋那些與運算一起EqualsTo條件語句。正如你所看到的,你將不得不爲每個邏輯運算符創建一個if語句,併爲每個比較運算符重寫visit()函數。有沒有更簡單的方法來做到這一點?
致謝輸入字符串下面的輸出爲答案。如果我可以對它投票,我會。這是一個很大的幫助。但是,您的解決方案不能完全解析where子句。它只顯示比較本身。我會發佈一個更完整的答案,我來。 – codering
好的。我認爲我的解決方案就是你想達到的。 Missinterpretation。所以我投票給你。 :) – wumpz