2012-11-11 148 views
0

我爲mysql編寫一個數據庫中間件。我需要確定一個sql語句isRead語句或isWrite語句並提取模式和表信息。我通過google發現的一些解析器只解析DML語句。但是我需要一個解析器可以解析mysql服務器可以執行的所有語句。有沒有一個java解析器可以模擬mysql服務器解析器?

你認爲這是一個好主意,我直接在java中調用mysql解析器或者可能嗎?

+0

Google搜索將您的問題放在頂部;接下來的選擇是http://sqlparser.com/ – Jayan

+0

它功能強大,但我認爲它不是免費的。 – pythonee

+0

是的。順便說一句,我添加了Java標記。希望這很好。 – Jayan

回答

0

你認爲這是一個好主意,我直接在java中調用mysql解析器或者可能嗎?

不,我不認爲這是一個好主意。從Java調用C/C++代碼很少是一個好主意。在這種情況下,解析器被嵌入到大量其他代碼中,並且可能能夠將其分離出來。最重要的是,它會將解析樹作爲難以在Java中使用的複雜本機數據結構發佈。

更好的方法是將現有的開源Java解析器用於SQL,並隨着時間的推移增加對解析MySQL特定語句的支持。

0

你可能要考慮使用阿里巴巴的Druid project的代碼。雖然設計爲複雜的連接池庫,但該項目爲ANSI SQL和非ANSI方言(如MySQL,Oracle,SQL Server等)提供了非常先進的parser and AST支持。該項目是開源的,並且支持非常自由的Apache許可版本2.0。

該部分圖書館的主要入口點是SQLUtils.java

相關問題