我已經看到這個問題通過將查詢存儲在XML中並在運行時將XML加載到自定義StoredQueriesCache對象中解決。要獲得查詢,我們將調用StoredQueriesCache對象上的方法,並傳遞查詢名稱(在XML中定義),並返回查詢。
寫這樣的東西相當簡單。 XML將如下所示:
<Query>
<Name>SomeUniqueQueryName</Name>
<SQL>
SELECT someColumn FROM someTable WHERE somePredicate
</SQL>
</Query>
對於每個存儲的查詢,您都有一個元素。在應用程序從文件啓動時,XML將被加載到內存中,或者根據您的需要,它可能會從文件中延遲加載。然後,包含XML的StoredQueriesCache對象將具有按名稱返回單個查詢的方法。根據我的經驗,查詢中的評論從來沒有引起過任何問題,因爲換行符是XML節點內聯網的一部分,但是如果您希望用於檢索查詢的StoredQueriesCache方法可以解析註釋。
我發現這是存儲查詢時最有組織的方式,不用將它們嵌入代碼中,也不使用存儲過程。應該誠實地有一個圖書館爲你做這件事;也許我會寫一個!
來源
2012-10-10 20:00:30
Jim
以某種方式類似:http://stackoverflow.com/questions/660609/sql-parser-library-for-java – zeller
爲什麼你必須清理乾淨的東西。我發現刪除換行符會打斷你的註釋,但爲什麼不簡單地將查詢傳遞給數據庫引擎?這樣,您甚至可以在錯誤消息中獲得有意義的行號。 – MvG
這是一個有效的MvG點,不過由於這些格式化的SQL語句中的一些非常大,在某些情況下超過100行,由於來自'left join'的'case'語句和嵌套'選擇'語句有很多要整理保存。我們的RDBMS(OpenEdge)也不提供錯誤的行號,實際上包含了所有的空白,沒有錯誤的新行,使得識別錯誤變得更加困難。儘管對於其他情況,您的觀點仍然有效。 –