2012-12-28 168 views
0

目前我正在將數據庫從Oracle遷移到MySQL。我主要使用Java將查詢發送到使用JDBC的數據庫。在遷移過程中,我需要在Java代碼中更改很多查詢(查詢是硬編碼的),因爲它們在MySQL中不起作用。從Oracle遷移到MySQL

我希望能夠重新編碼我的查詢,以便在出現問題時可以輕鬆地在數據庫之間切換;我正在將所有查詢改爲標準SQL,但有些地方這是不可能的。我正在考慮有兩個版本的查詢,一個用於Oracle,另一個用於MySQL,所以我可以在兩者之間切換(爲了查看MySQL是否可以滿足我們的需求,我將暫時使用兩個版本)。然而,這似乎是一個可怕的想法 - 有沒有人有更好的方法,他們會這樣做的任何意見?

+0

您是否考慮過使用ORM解決方案? (休眠或類似) – favoretti

+0

@favoretti從來沒有聽說過一個ORM會考慮它感謝。 – JCS

回答

3

你有一堆選項。首先,很多人現在使用對象關係映射(ORM)工具將應用程序連接到SQL數據庫。它們有各種不同的風格--Hibernate很受歡迎 - 並且允許您以極低的成本在數據庫之間切換。但是,他們確實有一個相當陡峭的學習曲線。沒有經驗的開發人員通常會在ORM應用程序中遇到性能問題。

如果你堅持使用「傳統」的JDBC,我建議你將SQL的主體從Java代碼中拿出來,並把它看作是一種資源。正如Henry所建議的那樣,您可以使用屬性文件,並使用參數佔位符(理想的命名佔位符,使用Spring template)。雖然這確實將給定功能塊的代碼分散到兩個文件中,但它可以很容易地快速優化SQL並測試新版本。

+0

我會嘗試第二種解決方案,謝謝。 – JCS

0

一種可能性是將查詢存儲在屬性文件中。你將有一個用於Oracle,一個用於MySql。

0

我必須添加 - ORM是一個很好的建議,並且可以工作......當您開始使用全新的應用程序時,您可以設計您的應用程序以在域模型上工作。

但是,在這種情況下,存在調用大量SQL查詢的現有應用程序。基於ORM的查詢(HQL,JPQL)轉換爲SQL就好了;然而,SQL並沒有按照定義轉換爲ORM層,但是需要進行重大更改才能使其成爲面向數據的更加面向對象的方法。

即使您設法在ORM層中工作,問題仍然會持續存在。 MySQL和Oracle之間在主鍵生成工作方式上已經有了很大的區別; MySQL在Oracle使用序列的地方使用自動編號。可能你已經有了一個現有的數據模型,你需要對ORM層代碼進行反向工程;它不會是跨數據庫代碼。