我在後端使用MySQL在Struts2中開發了一個應用程序。但是現在按照興趣,我想在後端使用Oracle。如何通過更改Struts2中的配置來更改當前使用的數據庫
爲此,我將數據庫配置更改爲Oracle,但是我發現某些MySQL查詢無法直接在Oracle上運行。
我搜索得太多,嘗試了一些東西,但仍然沒有解決方案。任何人都可以幫忙嗎?
我在後端使用MySQL在Struts2中開發了一個應用程序。但是現在按照興趣,我想在後端使用Oracle。如何通過更改Struts2中的配置來更改當前使用的數據庫
爲此,我將數據庫配置更改爲Oracle,但是我發現某些MySQL查詢無法直接在Oracle上運行。
我搜索得太多,嘗試了一些東西,但仍然沒有解決方案。任何人都可以幫忙嗎?
您可以使用Hibernate,它具有MySQL和Oracle的方言。但是如果你使用原生查詢,那麼你應該爲每種方言使用單獨的代碼。
在BaseHibernateDAO
您可以創建一個方法
protected Dialect getDialect(){
return ((SessionFactoryImplementor) sessionFactory).getDialect();
}
然後你可以使用這個方言爲你創建的任何查詢。
在我看來你已經回答了你自己的問題。 MySQL查詢並不完全與ORACLE兼容(例如:MySQL中的LIMIT是ORACLE中的ROWNUM)。 因此,如果您有'原始SQL'語句涉及MYSQL的特定術語,您應該將其更改爲ORACLE。但是,如果您使用的是Objects來生成查詢,則應該/應該通過您正在使用的(例如)持久性解決方案「自動地」處理;只需通過更改設置中的數據庫驅動程序。
有關更多詳細信息,我們需要一些適用於MYSQL的代碼示例,而不適用於ORACLE。
讓我知道是否有幫助。
好吧,謝謝@pegas有manies的東西,它不直接在oracle上工作,如:自動增加值,限制,sysdate(),空值等。 –
是的,我使用原生查詢,它們大約10000數。我無法測試每一個查詢,然後更改代碼,這就是爲什麼我要求任何解決方案。謝謝,但它不認爲它是一個更好的主意,使用一個單獨的代碼。@ Roman C –
我還建議你使用Hibernate與HQL查詢。任何你必須使用oracle的方式,然後更好的先寫HQL然後它將適應任何數據庫。 – Mohan
您可以舉幾個例子嗎?@ RomanC –