JSqlParser
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
[[構文解析の記事一覧]]
*目次 [#ie85c50a]
#contents
*JSqlParser [#z990ac26]
http://jsqlparser.sourceforge.net/
SQLを解析してJavaクラスの階層構造に変換する
**特徴 [#de654001]
-Visitorパターンをつかったプログラミングが身に付くという...
Visitorパターンについて知りたい場合は下記のURLなどを見る
Visitorパターンって、Visitorが訪れるイベントしかとれない...
ありがたくない気がする。
なぜなら、構文は開始を終了が明確になっていないと、構文木...
だったら、はじめからjparsecをつかってたほうがいいってこと...
http://www.aerith.net/design/Visitor-j.html
-Oracle特有の外部結合の(+)とかプレースホルダーとかは対応...
-ただ、SELECT文の場合とか、UPDATE文の場合とかを事前にこち...
**使い方:準備 [#v0afcae4]
ダウンロードしてきたjarのパスをzipに変換して解凍し、
そのなかからlibフォルダにjarがあるので、そいつをeclipseの...
**サンプル [#ye6afd41]
サイトのサンプルがちょっと手直しが必要だったので直して、...
TablesNamesFinderのStringValueはEclipseの自動補完を使うと...
import net.sf.jsqlparser.expression.StringValue;
としておきましょう
JoinVisitor(だっけか?)は削除しておきます。
CCJSqlParserManager pm = new CCJSqlParser...
/*
* Oracleのプレースホルダーは対応してないので、''で括る...
* :AAA -> ':AAA'
* Oracleの外部結合である(+)も対応していないので、削っ...
* (+) -> 削除
*/
String sql = "SELECT * FROM MY_TABLE1, MY_TABLE2, (SELE...
" WHERE ID = (SELECT MAX(ID) FROM MY_TABLE5) AND ID2 IN...
net.sf.jsqlparser.statement.Statement statement = pm.pa...
/*
対象のSQL文字列が何を行うか(たとえばSELECTなのかINSERT...
StatementVisitorをimplementsで実装したクラスをつかって...
とりあえずここでは例としてSELECT用のselectStatementをつ...
*/
if (statement instanceof Select) {
Select selectStatement = (Select) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesF...
List tableList = tablesNamesFinder.getTableList(select...
for (Iterator iter = tableList.iterator(); iter.hasNex...
System.out.println(iter.next());
}
}
*感想 [#s3c3f85a]
サンプルにJavaのコードのパース例とか載っているし、
BNFファイルのパース例とかが載っていて、興味深い。
この手のパースプログラムは、その他のパースプログラムの定...
おもわれる。なぜなら移植したほうが、いちから作成するより...
構文木を生成して、別の言語。特に自分自身の言語でのパース...
便利なのだろう。
終了行:
[[構文解析の記事一覧]]
*目次 [#ie85c50a]
#contents
*JSqlParser [#z990ac26]
http://jsqlparser.sourceforge.net/
SQLを解析してJavaクラスの階層構造に変換する
**特徴 [#de654001]
-Visitorパターンをつかったプログラミングが身に付くという...
Visitorパターンについて知りたい場合は下記のURLなどを見る
Visitorパターンって、Visitorが訪れるイベントしかとれない...
ありがたくない気がする。
なぜなら、構文は開始を終了が明確になっていないと、構文木...
だったら、はじめからjparsecをつかってたほうがいいってこと...
http://www.aerith.net/design/Visitor-j.html
-Oracle特有の外部結合の(+)とかプレースホルダーとかは対応...
-ただ、SELECT文の場合とか、UPDATE文の場合とかを事前にこち...
**使い方:準備 [#v0afcae4]
ダウンロードしてきたjarのパスをzipに変換して解凍し、
そのなかからlibフォルダにjarがあるので、そいつをeclipseの...
**サンプル [#ye6afd41]
サイトのサンプルがちょっと手直しが必要だったので直して、...
TablesNamesFinderのStringValueはEclipseの自動補完を使うと...
import net.sf.jsqlparser.expression.StringValue;
としておきましょう
JoinVisitor(だっけか?)は削除しておきます。
CCJSqlParserManager pm = new CCJSqlParser...
/*
* Oracleのプレースホルダーは対応してないので、''で括る...
* :AAA -> ':AAA'
* Oracleの外部結合である(+)も対応していないので、削っ...
* (+) -> 削除
*/
String sql = "SELECT * FROM MY_TABLE1, MY_TABLE2, (SELE...
" WHERE ID = (SELECT MAX(ID) FROM MY_TABLE5) AND ID2 IN...
net.sf.jsqlparser.statement.Statement statement = pm.pa...
/*
対象のSQL文字列が何を行うか(たとえばSELECTなのかINSERT...
StatementVisitorをimplementsで実装したクラスをつかって...
とりあえずここでは例としてSELECT用のselectStatementをつ...
*/
if (statement instanceof Select) {
Select selectStatement = (Select) statement;
TablesNamesFinder tablesNamesFinder = new TablesNamesF...
List tableList = tablesNamesFinder.getTableList(select...
for (Iterator iter = tableList.iterator(); iter.hasNex...
System.out.println(iter.next());
}
}
*感想 [#s3c3f85a]
サンプルにJavaのコードのパース例とか載っているし、
BNFファイルのパース例とかが載っていて、興味深い。
この手のパースプログラムは、その他のパースプログラムの定...
おもわれる。なぜなら移植したほうが、いちから作成するより...
構文木を生成して、別の言語。特に自分自身の言語でのパース...
便利なのだろう。
ページ名: