web-dev-qa-db-ja.com

JavaのSQLパーサーライブラリ

SQLステートメントを解析するためのオープンソースJavaライブラリはありますか?

可能であれば、ベンダー固有の構文(Oracleテーブルスペース定義やMySQLのLIMIT句など)を解析(または少なくとも無視)できるように、カスタマイズ可能または柔軟でなければなりません。

そうでない場合は、SQL標準への厳密な準拠も問題ありません。

更新:次の2つの目的でこれが必要です。

  • 非SQLデータベースへのSQLインターフェースの提供(内部API呼び出しへのマッピング)
  • 実際のデータベース(Oracleなど)に行く前にSQLを書き換える
134
Thilo

ANTLR にはANSI SQL文法が用意されています。これを使用して、独自のパーサーを作成できます。

ANTLR4には SQL文法 があります。

51
duffymo
  • JSqlParser
  • Prestoのパーサー はANTLR4を使用して記述され、パーサーから構築された独自の不変のASTクラスを持っています。 ASTには訪問者とプリティプリンターがあります。
33
David Phillips

パーサー

パーサーが必要な場合は、 Apache Derby のコードベースにパーサーが必要です。

ベンダー固有のSQLを扱う

Jdbc Connectionオブジェクトの 。native() メソッドを参照すると、ベンダー固有のクエリに後処理されるベンダーニュートラルクエリを渡すことができます。

9
Elijah

Java用の一般的なSQLパーサー はオープンソースではありませんが、まさにあなたが探しているものです。

7
James

試す Zql

6
jagamot

Hibernateは、SQLおよびhqlの解析にANTLRを使用します。

JSqlParserも良いオプションです。ただし、Oracle pl/sqlの解析中にいくつかのバグ(または実装されていない機能)があります。詳細については、そのフォーラムを参照してください。

したがって、Oracle pl/sqlを解析する場合は、ANTLRをお勧めします。

3
Han Zheng

解析されたSQLで何をしたいですか?既存のSQL文法を使用できるLex/YaccのいくつかのJava実装( BYACC/JJava Cup )を推奨できます。

結果の構文解析された文法で実際に何かをしたい場合は、Javaで書かれたオープンソースのSQLデータベースである Derby を参照することをお勧めします。

2