0

Java でデータベース クエリの主な where 句のインデックスを取得したいですか。これを正規表現で処理するにはどうすればよいですか?

たとえば、このクエリでは、2 番目の where 句を取得したいと考えています。

  select u.id, (select x.id from XEntity where x.id = 200) 
  from UserEntity u 
  **where** u.id in (select g.id from AnotherEntity g where g.id = 100) 

その後の「(」の文字と「)」の文字の数が等しいのが主なところだと思います。しかし、正規表現でこれを取得する方法がわかりません。

敬具

4

2 に答える 2

0

正規表現は、SQLクエリのような複雑な構造を認識するのはあまり得意ではありません。主な理由は、SQLが文脈自由ではないためです。これはまさにあなたが直面している問題です。WHEREは多くの場所に現れる可能性があり、特にクエリの全体的な構造に依存するものが必要です。

必要なのは適切なパーサーです。私が見つけた唯一のJavaScriptSQLパーサーは完全ではありませんが、ニーズに合っていることを確認することで、いつでも開発を支援できます。

于 2012-06-25T23:40:01.040 に答える
0

トゥートとデビッド・ブラバントの言ったことは絶対に正しい。SQL の解析、特に正規表現のみを使用した複雑な SQL の解析は、非常に難しい問題です。

あなたの質問の要点であると思われるJavaでのSQLの解析に関しては、JSQLParser と呼ばれる非常に優れた(明らかにメンテナンスされていない場合)ライブラリがあります。このライブラリの最新バージョンは、こちらの Githubにあります(免責事項: 私はこれに非常に小さな貢献をしました)。メイン ページには、AST の出力を使用するように設計されたビジターの例が示されています

文法リストで使用できるANTLR の文法もあります。または、冒険好きなら、H2 データベースは、MySQL などのいくつかの独自機能を含む、かなり広範囲の SQL をサポートしています。パーサーを変更して、必要な情報を抽出するための適切な構造を生成できます。

于 2012-06-26T00:03:52.467 に答える