有什麼方法可以測試SQL腳本是否包含java/junit測試的標準SQL?如何測試sql腳本是junit測試中的標準sql?
目前我們有用於在Postgres數據庫中創建數據庫等的SQL腳本,但是當使用hsqldb時,一切都會失敗。這就是爲什麼我想知道是否有任何Java工具存在用於測試,如果SQL語句是標準的SQL。
或者爲每個數據庫供應商創建不同的腳本集合是否明智? 如果是這樣,有沒有一種方法來測試一個給定的腳本是否適用於postgres/hsqldb?
有什麼方法可以測試SQL腳本是否包含java/junit測試的標準SQL?如何測試sql腳本是junit測試中的標準sql?
目前我們有用於在Postgres數據庫中創建數據庫等的SQL腳本,但是當使用hsqldb時,一切都會失敗。這就是爲什麼我想知道是否有任何Java工具存在用於測試,如果SQL語句是標準的SQL。
或者爲每個數據庫供應商創建不同的腳本集合是否明智? 如果是這樣,有沒有一種方法來測試一個給定的腳本是否適用於postgres/hsqldb?
我通常做了一個非常簡單的java包裝,通過使用帶有一些標準用戶/密碼設置的本地主機連接來測試此代碼 。
請記住使用臨時數據庫或已知的測試數據庫,以便您的測試 不會破壞任何重要的東西。
上面的原因是我需要特定的數據庫(非標準 功能等)。
如果你只想測試junit測試的標準sql-stuff(如語法,選擇等), 我會考慮在java中使用嵌入式sql數據庫(僅限ususally memory)。 這樣就可以很容易地測試大量的東西,而無需安裝db ,而且沒有任何其他安裝的風險。
H2數據庫支持不同的modes,它可以幫助您進行postgres測試,我發現我們的sql通常包含不支持但H2的函數,但您可以創建自己的「存儲過程」,它實際上調用靜態Java方法來解決這個問題。如果你想支持不同的數據庫供應商,你應該遵循供應商特定的腳本路線,除非你正在做基本的查詢。
如果您有可用資源,我建議您設置一個完全成熟的UAT環境,您可以使用它來測試實時postgres數據庫,因爲即使看起來很小的數據庫配置差異也會以意想不到的方式影響查詢計劃。
這聽起來像你正在尋找一個SQL語法解析器和驗證器。我熟悉的唯一Java SQL解析器是Zql,但我從來沒有真正使用它。
去年年初提出了一個類似的問題,那裏的最佳答案竟然是用ANTLR編寫自己的解析器。
不同的供應商在其SQL實現中公開了不同的附加功能。
您可以決定要測試的數據庫集。然後使用http://dbunit.sourceforge.net來簡化測試工作。
檢查SQL語句是否符合標準SQL的最佳工具是HSQLDB 2.0。數據定義語句尤其如此。 HSQLDB已經寫入標準,而不是採用幾個版本的標準。
PostgresSQL已經慢慢向標準SQL發展。但它仍然有一些「傳統」數據類型。 HSQLDB允許您使用CREATE TYPE語句定義類型,以便與其他方言兼容。它還允許您爲了相同的目的在SQL或Java中定義函數。
最好的策略是儘可能使用標準SQL,用戶定義的類型和函數支持替代數據庫的語法。
ZQL工作正常使用JUnit ..
ZqlParser parser = new ZqlParser(any input stream);
try{
parser = parser.readStatement();
}catch(ParseException e){
// if sql is not valid it caught here
}
見http://stackoverflow.com/questions/141499/any-java-libraries-out-there-that-validate-sql-syntax – 2010-08-25 08:27:07
感謝鏈接! – kosoant 2010-08-25 09:01:22
另一個很好的理由,**不**在生產和測試中使用不同的DBMS。即使_if_你可以測試一個SQL查詢是「標準」的SQL,並不意味着它可以在所有DBMS上同樣運行。沒有DBMS實現完整的SQL標準,有些忽略標準定義的規則。 – 2016-01-06 19:28:31