私は周りを見回しましたが、SOで具体的に尋ねられたものを見つけることができなかったようですが、この質問のような同様の質問と、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()
orに置き換えますDateTime.now().minusHours( 1 ).toGregorianCalendar().getTime()
- コメントアウトされた行を試しますが、タイプを次のように変更します
Timestamp
それで、ここに私の質問または質問があります...
SQL Server の日時列のクエリに関する既知のバグ\問題はありますか?
を使用する必要があるのはなぜTime
ですかTimestamp
?
オブジェクトを直接クエリすると、Spring が日付オブジェクトを に変換していると思われTimestamp
ます (#2 で示したように)。