sql server jdbc查询日期时间列
Posted
技术标签:
【中文标题】sql server jdbc查询日期时间列【英文标题】:sql server jdbc query on datetime column 【发布时间】:2012-08-30 17:59:45 【问题描述】:我环顾四周,似乎找不到在 SO 上专门提出的问题,但我发现了类似的问题,例如 this one 以及许多关于 SQL 本身或 C# 的问题...
这是我所看到的:
MapSqlParameterSource parameterSource = new MapSqlParameterSource();
//parameterSource.addValue( "insertDate", DateTime.now().minusHours( 1 ).toGregorianCalendar(), Types.TIME );
parameterSource.addValue( "insertDate", new Timestamp( DateTime.now().minusHours( 1 ).getMillis() ) );
List< String > contents =
_simpleJdbcTemplate
.query(
"SELECT TOP (200) inserteddatetime, Contents FROM dbo.tsomeTable WHERE (ServiceName = 'something') and inserteddatetime > :insertDate",
new RowMapper< String >()
@Override
public String mapRow( final ResultSet rs, final int rowNum ) throws SQLException
System.out.println( rs.getTimestamp( "inserteddatetime" ) );
return rs.getString( "Contents" );
, parameterSource );
查询“挂起”\什么都不做\从不返回,如果:
-
我使用未注释的 Timestamp 对象(如上所示)
我将
parameterSource
对象替换为DateTime.now().minusHours( 1 ).toGregorianCalendar()
或DateTime.now().minusHours( 1 ).toGregorianCalendar().getTime()
我尝试注释掉的行,但将类型更改为Timestamp
所以,这是我的一个或多个问题......
在 sql server 中查询日期时间列是否存在已知错误\问题?
为什么我必须使用Time
而不是Timestamp
?
当我直接查询对象时,我怀疑 Spring 将日期对象转换为 Timestamp
(如 #2 所示)。
【问题讨论】:
我开发了几个由 SQLServer 2005/2008 支持的应用程序,并且日期/时间查询/列工作正常。包含用于创建表的 ddl 会很有帮助(对于 insertDatetime 的列类型)。 悬挂/永不返回对我来说听起来很可疑。您可以运行 Sql Server 跟踪并查看它在做什么吗? msdn.microsoft.com/en-us/library/ms175047.aspx 另外,您能否确认您使用的是带有 insertDate 而不是 TIMESTAMP 的日期时间列? 【参考方案1】:TIMESTAMP
是一个服务器生成的值,用于帮助data consistency
,它不是一个简单的数据类型,所以对于storing datetime value
,避免使用TIMESTAMP 数据类型。
另外,SQL Server TIMESTAMP 是 confusing
,它是 deprecated
。它被ROWVERSION keyword
取代,这样可以减少混淆。
【讨论】:
以上是关于sql server jdbc查询日期时间列的主要内容,如果未能解决你的问题,请参考以下文章