1

非常に奇妙なことに、MSSQL データベースからの JDBI クエリが type の列に対して間違った値を返すことがわかりましたdatetimeoffset(4)。データベースには単一の行があります(健全性のために他のすべての行を削除しました)

ID | Datetimeoffset 
------------------------------------
1  | 2016-01-19 22:03:17.0309 -05:00

以下をJavaで実行すると2016-01-17 22:12:50.7357 -05:00、DBの値とは非常に異なる時間が出力されます。JDBI のどこかで、列の値を解析しようとして、DATETIMEOFFSETどういうわけか混乱していると思いますか?

また、取得した値をjava.sql.Timestampオブジェクトに変換してミリ秒値を見ると、現在の約2日前です。 System.currentTimeMillis()

tblDao.getRow(1)

@RegisterMapper(RowMapper.class)
public interface TblDao {
   @SqlQuery("SELET ID, Datetimeoffset FROM tbl WHERE ID = :id")  
   Row getRow(@Bind("id") Long id);
 }

public class RowMapper implements ResultSetMapper<Treatment> {

@Override
public Row map(int index, ResultSet resultSet, StatementContext statementContext ) throws SQLException {

    Object timestampObj = resultSet.getObject("CreatedDatetimeoffset");
    system.println(timestampObj)
4

1 に答える 1

1

この問題は SqlServerDriver が原因であることが判明しました。バージョン 4.0 のマシンで実行すると、datetimeoffsetクエリによって適切な値が返されました。バージョン 3.0 のマシンから間違った値が返されていました。

于 2016-01-20T17:20:57.290 に答える