use*_*620 6 java oracle timezone spring jdbc
我有一个spring/jdbc/oracle 10g应用程序.Oracle服务器数据库时区设置为GMT + 2 JVM时区为GMT + 2(即使在我的情况下无关紧要).
我有一个执行一些日期操作的存储过程.问题是会话时区与数据库时区不同(GMT),即使我没有在我的代码/配置中明确设置会话时区.
据我所知,会话时区默认等于数据库时区.知道为什么会话时区与数据库时区不同,或者如何在spring配置中配置它(org.apache.commons.dbcp.BasicDataSource)?
谢谢.
小智 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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7188 次 |
| 最近记录: |