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
をしかし、それだけで一緒にAND演算されEqualsTo条件文をカバーしています。ご覧のとおり、すべての論理演算子に対してif文を作成し、各比較演算子のvisit()関数をオーバーライドする必要があります。これを行う簡単な方法はありますか?
おかげでの入力文字列の次の出力を生成します答えのために。私がそれを上告することができれば私はそれを望む。それは大きな助けとなった。しかし、あなたのソリューションはwhere節を完全に解析しません。それは比較自体を示すだけです。私は来たより完全な答えを投稿します。 – codering
私は私のソリューションがあなたが達成したいと思ったものだと思った。誤解。だから私はあなたに投票した。 :) – wumpz