mysql用のデータベースミッドウェアを作成します。SQLステートメントのisReadステートメントまたはisWriteステートメントを決定し、スキーマとテーブルの情報を抽出する必要があります。グーグルで見つけたパーサーの中には、DMLステートメントのみを解析するものがあります。しかし、パーサーがmysqlサーバーが実行できるすべてのステートメントを解析できる必要があります。
それは私がJavaで直接mysqlパーサーを呼び出すのは良い考えだと思いますか、それとも可能ですか?
それは私がJavaで直接mysqlパーサーを呼び出すのは良い考えだと思いますか、それとも可能ですか?
いいえ、それは良い考えではないと思います。JavaからC/C++コードを呼び出すことはめったに良い考えではありません。そしてこの場合、パーサーは他の多くのコードに埋め込まれており、それを分離できる可能性があります。その上、Javaから使用するのが難しい複雑なネイティブデータ構造として解析ツリーを出力します。
より良いアプローチは、SQL用の既存のオープンソースJavaパーサーを使用し、(時間の経過とともに)MySQL固有のステートメントの解析のサポートを追加することです。
アリババのドルイドプロジェクトのコードの使用を検討することをお勧めします。洗練された接続プールライブラリとして設計されていますが、このプロジェクトは、ANSI SQLおよびMySQL、Oracle、SQL Serverなどの非ANSIダイアレクト用の非常に高度なパーサーとASTをサポートしています。プロジェクトはオープンソースであり、非常に寛大なApacheライセンスバージョンを備えています。 2.0。
ライブラリのこの部分への主なエントリポイントはSQLUtils.javaです。