2010-08-03 130 views
3

在前端或任何語言中是否有任何SQL查詢驗證器用於在數據庫中執行之前驗證查詢語法?在我當前的項目中,我必須驗證flex之前的sql查詢返回因爲它必須在觸及數據庫之前傳遞很多層,並且觸擊數據庫並返回一個異常是一個過於昂貴的過程。所以我需要前端的sql查詢驗證器來至少聲明一個有效的查詢。SQL查詢驗證器

+0

任何特定的數據庫?在另一個數據庫中有效的SQL可能無效。 – Oded 2010-08-03 08:18:00

+0

我們必須支持所有的數據庫。 – Bhaswanth 2010-08-03 08:22:07

+0

你的SQL是靜態的(還是參數有限),還是動態的? 如果它是靜態的,你可以在項目開發期間評估(假設沒關係?)。 如果它是動態的,你需要在你的應用程序內部使用一個插件來驗證它,然後將它發送到(可能的話)多種類型的數據庫(如果我讀了你的話)。這聽起來像是一個相當不平衡的解決方案。 – Tobiasopdenbrouw 2010-08-03 08:27:12

回答

1

你可以搶SQL BNF grammar和使用parser generator驗證輸入。我相信你將不得不調整標準語法,這不是微不足道的。 另外,我相信你可以找到更好的東西,但是我希望上面的東西能讓你找到某個地方。

+0

你..這可以幫助律bit.will看看它..感謝:) – Bhaswanth 2010-08-03 08:26:40

1

for SQL在運行時解析您可以看看: SQL4J是一個用Java編寫的SQL解析器。 http://www.cs.toronto.edu/~jglu/sql4j/index.htm

http://jsqlparser.sourceforge.net/

也許你可以使用ANTLR的,它有許多SQL語法。 http://www.antlr.org/grammar/list

或者按照建議,使用開源SQL實用程序的解析器,如SQuirreL SQL Client。 http://squirrel-sql.sourceforge.net/

或者使用像SmallSQL這樣的開源純Java DBMS的一部分。 http://www.smallsql.de/

有一些Eclipse IDE插件用於驗證IDE中的SQL。

退房: http://www.eclipse.org/datatools/

+0

但那些我可以驗證一次也通過用戶干預。我的要求是,我將生成一個查詢從flex使用用戶通過單擊按鈕或某些行動的幫助。生成的查詢應該驗證句法在那裏本身通過一段代碼。 – Bhaswanth 2010-08-03 08:17:57

+0

@Bhaswanth所以你動態生成查詢?是不是一個查詢,你只是傳遞用戶選擇的標準或值來查詢? – YoK 2010-08-03 08:20:37

+0

@YoK,據我所知,他正在使用它作爲調試工具/異常處理程序。 – Unreason 2010-08-03 08:22:00