我需要一個java API來解析SQL語句。需要java API來解析SQL語句
例如,我有一個SQL查詢
SELECT
PRODUCTS.PROD_ID,
PRODUCTS.PROD_NAME,
PRODUCTS.PROD_CATEGORY,
PRODUCTS.PROD_TOTAL_ID
FROM
PRODUCTS
我需要檢索表名「產品」和列名「Prog_ID」等
請提供教程或任何鏈接代碼片段如果可能的話。
我需要一個java API來解析SQL語句。需要java API來解析SQL語句
例如,我有一個SQL查詢
SELECT
PRODUCTS.PROD_ID,
PRODUCTS.PROD_NAME,
PRODUCTS.PROD_CATEGORY,
PRODUCTS.PROD_TOTAL_ID
FROM
PRODUCTS
我需要檢索表名「產品」和列名「Prog_ID」等
請提供教程或任何鏈接代碼片段如果可能的話。
使用來自http://zql.sourceforge.net/的ZQL解析庫結束。
如果您在簡單查詢,也應該做的工作很容易
請將此標記爲「接受的答案」,除非現在有更好的答案。 – 2012-01-08 12:32:09
ANTLR是一個解析器生成器,它有一個SQL grammar,但這可能比你討價還價的更多。
只要您的要求不會太瘋狂,自己寫一個會更簡單。你需要多大程度?
在那裏完成了!解析SQL有點噩夢 - 你需要解析一個特定的方言(ORACLE,SQLServer等)。大量的關鍵字,不一致的語法,關鍵字的重載意味着你需要一個龐大而複雜的語法。 – 2011-05-04 10:42:07
我有一個非常簡單的要求,上面發佈的查詢是我將要使用的唯一格式。 – user727272 2011-05-04 12:36:38
@ user727272,在這種情況下,您可以構造ANTLR語法以僅適用於該格式,並解析它。如果您在ANTLR網站上找到教程以獲得Terrence Parr的書 - [The Definitive ANTLR Reference](http://pragprog.com/titles/tpantlr/the-definitive-antlr-reference)很難。 – 2011-06-15 06:45:33
如果您有與數據庫的連接,你可以做,用事先準備好的聲明:
String sql = "....";
PreparedStatement pstmt = connection.prepareStatement(sql);
ResultSetMetaData meta = pstmt.getMetaData();
然後你可以使用ResultSetMetaData.getColumnCount()
和getColumnName(int)
來檢索列名。如果您的JDBC驅動程序支持它,您甚至可以使用getTableName(int)
請注意,並非所有驅動程序都支持在實際執行語句之前獲取元數據,您需要使用您正在使用的那個進行測試。
正則表達式匹配只適用於簡單查詢,SQL有一個複雜的遞歸語法,並且總會有一些子選擇,分組依據或文字,這些會破壞基於正則表達式的解析器。
下面是a demo說明如何實現您需要使用一般的SQL語法分析程序是什麼:
[對Java SQL語法分析程序庫(的
可能重複http://stackoverflow.com/questions/660609/sql-parser- library-for-java) – codingbadger 2011-06-15 12:51:05