我爲mysql編寫一個數據庫中間件。我需要確定一個sql語句isRead語句或isWrite語句並提取模式和表信息。我通過google發現的一些解析器只解析DML語句。但是我需要一個解析器可以解析mysql服務器可以執行的所有語句。有沒有一個java解析器可以模擬mysql服務器解析器?
你認爲這是一個好主意,我直接在java中調用mysql解析器或者可能嗎?
我爲mysql編寫一個數據庫中間件。我需要確定一個sql語句isRead語句或isWrite語句並提取模式和表信息。我通過google發現的一些解析器只解析DML語句。但是我需要一個解析器可以解析mysql服務器可以執行的所有語句。有沒有一個java解析器可以模擬mysql服務器解析器?
你認爲這是一個好主意,我直接在java中調用mysql解析器或者可能嗎?
你認爲這是一個好主意,我直接在java中調用mysql解析器或者可能嗎?
不,我不認爲這是一個好主意。從Java調用C/C++代碼很少是一個好主意。在這種情況下,解析器被嵌入到大量其他代碼中,並且可能能夠將其分離出來。最重要的是,它會將解析樹作爲難以在Java中使用的複雜本機數據結構發佈。
更好的方法是將現有的開源Java解析器用於SQL,並隨着時間的推移增加對解析MySQL特定語句的支持。
你可能要考慮使用阿里巴巴的Druid project的代碼。雖然設計爲複雜的連接池庫,但該項目爲ANSI SQL和非ANSI方言(如MySQL,Oracle,SQL Server等)提供了非常先進的parser and AST支持。該項目是開源的,並且支持非常自由的Apache許可版本2.0。
該部分圖書館的主要入口點是SQLUtils.java。
Google搜索將您的問題放在頂部;接下來的選擇是http://sqlparser.com/ – Jayan
它功能強大,但我認爲它不是免費的。 – pythonee
是的。順便說一句,我添加了Java標記。希望這很好。 – Jayan