2010-05-10 18 views
5

我有一個spring/jdbc/oracle 10g應用程序。 Oracle服務器數據庫時區設置爲GMT + 2 JVM時區爲GMT + 2(儘管對我而言並不重要)。使用spring jdbc設置會話時區oracle

我有一個執行一些日期操作的存儲過程。問題是會話時區與數據庫時區不同(GMT)不同,即使我沒有在我的代碼/配置中設置會話時區。

據我所知,會話時區默認等於數據庫時區。任何想法爲什麼會話時區不同於數據庫時區或我怎樣才能配置它在春季配置(org.apache.commons.dbcp.BasicDataSource)?

謝謝。

+1

您的意思是指哪一個環節? Oracle連接會話或HTTP會話?前者,我假設? – skaffman 2010-05-10 20:24:19

+0

這解決了你的問題?我需要在MySQL上做同樣的事情,我仍然在尋找如何做到這一點! – 2011-05-11 20:40:46

+0

我有問題/職位留在這個DEAD模式!沒有答案,沒有確認,沒有猜測! – 2011-05-12 14:31:28

回答

6

正確的方法是使用DelegatingDataSource,從原始數據源中檢索OracleConnection對象,並用適當的參數調用OracleConnection.setSessionTimeZone()

C3P0代碼如下所示:

private Object[] timeZoneArgs = new Object[] { "Europe/Berlin" }; 

@Override 
public Connection getConnection() throws SQLException { 
    Connection conn = super.getConnection(); 
    try { 
     final Method setSessionTimeZoneMethod = OracleConnection.class.getMethod("setSessionTimeZone", String.class); 
     final C3P0ProxyConnection castCon = (C3P0ProxyConnection) conn; 
     castCon.rawConnectionOperation(setSessionTimeZoneMethod, C3P0ProxyConnection.RAW_CONNECTION, timeZoneArgs); 
     return conn; 
    } catch (Exception e) { 
     log.error("setSessionTimeZone failed " + e.getMessage()); 
     return conn; 
    } 
} 
1

我從v10.2.0.1.0升級Oracle的JDBC驅動程序v11.2.0.3解決了這個問題。我的java代碼不需要更改。

來源:Spring forums