如果您在toad中针对oracle DB运行此查询:
select
to_char(TRUNC(sysdate, 'DAY'),'DAY') start_of_the_week
from dual;
根据区域设置服务器设置,您将获得:
Sunday --EN, USA
Monday -- DE, GERMANY
这很有道理,也很好。
如果你通过OJDBC驱动程序在Java中执行完全相同的操作:
//....
Statement stm = JDBCConn.createStatement();
stm.execute("select to_char(TRUNC(sysdate, 'DAY'),'DAY') start_of_the_week from dual");
stm.getResultSet().next();
System.out.println(stm.getResultSet().getString("start_of_the_week"));
您将返回星期日或星期一,但这取决于您运行此语句的JVM提供的客户端本地设置。这意味着您获得的答案不再取决于服务器本地设置,而是取决于您的客户端设置。
修复非常简单,添加
Locale.setDefault(new Locale("EN", "US", "WIN")); //or German etc..
现在我的实际问题。为什么有人会认为这是个好主意?!?有没有这种情况有意义的情况?这是一个功能,因为在我看来这是一个错误,或者至少是非常糟糕的设计/概念。
此致 科林
答案 0 :(得分:0)
这应该是jdbc驱动程序功能
小心Locale.setDefault - 设置jvm默认值,这会影响应用程序的其他部分
使用oracle在处理时间戳类列以及如何将它们映射到java时也必须小心
请参阅 http://tonyhasler.wordpress.com/2010/09/04/tonys-tirade-against-timestamp-with-time-zone/