2010-05-10 22 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