use*_*724 24 java sql-server date jdbc
我正在使用Java JDBC将日期写入sql server 2008,然后将其读回.
读取的日期始终比书面日期提前两天.
我正在使用预准备语句插入包含Date字段的行.日期值由以下人员提供:
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) // -> 2012-07-02
ps.setDate(8, todaysDate);
Run Code Online (Sandbox Code Playgroud)
将日期写入db后,如果运行,sql server会显示正确的日期:
select date from table_name where date!=null // ->2012-07-02
Run Code Online (Sandbox Code Playgroud)
如果我通过JDBC运行相同的查询,则使用从结果集中检索日期值
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() // ->2012-06-30
Run Code Online (Sandbox Code Playgroud)
插入的行是表中唯一具有非空日期的行,因此这似乎不是读取错误记录的情况.
我认为这将是一个众所周知的问题,但我可以通过谷歌搜索找到"两天休息"问题的唯一参考没有明确的答案.
有任何想法吗?
beeky(生活在过去)
use*_*724 21
事实证明问题是MS jdbc驱动程序.我尝试了日期类型和日期转换的所有可能组合,但没有任何效果.经过大量的搜索(应该先完成!)我看到一个较旧的SO条目的评论暗示问题是来自Microsoft的版本3 jdbc驱动程序.我得到了最新的驱动程序,版本4.something,问题消失了.
感谢所有试图提供帮助的人.特别感谢Mike花时间发布解决方案. - = beeky
对于那些使用 maven 的人,将它用于 java 8:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.1.jre8</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
如前所述,如果您使用旧版本,则可能会遇到此问题,并且不容易调试。