java-SQL Server的timestamp2应该如何在JDBC中工作?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-SQL Server的timestamp2应该如何在JDBC中工作?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2247字,纯文字阅读大概需要4分钟。
内容图文
![java-SQL Server的timestamp2应该如何在JDBC中工作?](/upload/InfoBanner/zyjiaocheng/888/64f5d4208d334f048a69efdf6646620e.jpg)
我在尝试使用timestamp2代替SQL Server 2008中的Timestamp时遇到了一些麻烦.显然,rs.getTimestamp在timestamp和timestamp2之间的行为非常不同.但是,我找不到任何文档来说明应该有所不同,或者我应该使用不同的东西.我想知道我是否做错了什么.
环境:
>在SQL Express 2008(10.0)和SQL Server 2008 R2(10.5)上都尝试过.
> sqljdbc4.jar版本3.0,大小为537,303字节,CRC-32 = a0aa1e25,MD5 = 402130141d5f2cee727f4371e2e8fd8a.
> Java 1.6
这是一个演示该问题的单元测试.唯一的“魔术”是“ Db.getConnection()”,您可以用适当的代码替换它. datetime和datetime2的测试相同,但是datetime2测试失败,且日期早于2天.我将数据库中的所有时间都视为GMT / UTC,并且没有尝试将时区信息添加到datetime2数据的数据库数据中.
private void testTimestamp(TimeZone gmtTz, Connection conn, String query,
Calendar expectedCal) throws SQLException
{
PreparedStatement stmt = conn.prepareStatement(query);
ResultSet rs = stmt.executeQuery();
while (rs.next())
{
// Note the expectedCal has a GMT timezone.
Date actualTs = rs.getTimestamp("dt", expectedCal);
// Just print out the time difference
long diff = actualTs.getTime() - expectedCal.getTimeInMillis();
System.out.println("Diff=" + diff);
// Do the test to make sure they are the same
// In practice, this succeeds for datetime and fails for datetime2
Assert.assertEquals(expectedCal.getTimeInMillis(), actualTs.getTime());
}
}
@Test
public void testDateTime() throws SQLException
{
Connection conn = Db.getConnection();
TimeZone gmtTz = TimeZone.getTimeZone("GMT");
String query;
Calendar expectedCal = Calendar.getInstance(gmtTz);
expectedCal.clear();
expectedCal.set(2011, 10, 02, 11, 17);
query = "select CAST('2011-11-02 11:17:00' as datetime) as dt";
testTimestamp(gmtTz, conn, query, expectedCal);
query = "select CAST('2011-11-02 11:17:00.0000000' as datetime2) as dt";
testTimestamp(gmtTz, conn, query, expectedCal); // results in an error
}
我唯一的选择切换回时间戳了吗?
编辑:对于将来的Google员工,使用sqljdbc4.jar 3.0版,该测试在Linux上失败,但在Windows上通过.
我尚未尝试使用SQL Server 2012附带的sqljdbc4.jar版本4.0.
解决方法:
我记得没有听到有关官方SQL Server驱动程序和JTDS被优先使用的好消息(尽管我似乎找不到该链接).我个人会选择使用JTDS(当然要经过严格的测试),或者回到没有问题的版本.我没有使用过SQL Server,但从外观上看,似乎datetime2是首选的数据类型,因此我宁愿不还原.选项(d)并不是IMO的好选择.
内容总结
以上是互联网集市为您收集整理的java-SQL Server的timestamp2应该如何在JDBC中工作?全部内容,希望文章能够帮你解决java-SQL Server的timestamp2应该如何在JDBC中工作?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。