SQL Server 2008 datetime列JDBC插入问题

时间:2010-12-29 22:25:43

标签: java sql-server jdbc

我有一个表,其中一列是SQL Server 2008数据库中的DATETIME。正在插入的日期不是时间戳,因为在插入时使用NOW是可以接受的。在插入之前生成了一个日期,我想保留这个值。

日期时间被序列化为格式为yyyy-mm-dd hh:mm:ss.[fff...]的字符串,然后在插入之前转换为JDBC时间戳对象。

我遇到的SQL Server问题是它在插入之前将值转换为TIMESTAMP,然后抱怨:

com.microsoft.sqlserver.jdbc.SQLServerException: 
Cannot insert an explicit value into a timestamp column. 
Use INSERT with a column list to exclude the timestamp column, 
or insert a DEFAULT into the timestamp column.

如何在没有转换的情况下插入DATETIME列?

感谢。

2 个答案:

答案 0 :(得分:4)

SQL Server TIMESTAMP数据类型不是类似日期的数据类型。它是服务器生成的值,用于帮助实现数据一致性。如果要存储日期时间数据,请避免使用TIMESTAMP数据类型。

因此,请勿转换为JDBC Timestamp对象。数据可以作为字符串值插入。请注意,您指定的格式是可以的,但fff...必须是3位数,不能超过3位数的SQL Server DATETIME数据类型。

答案 1 :(得分:0)

如果列定义为TimeStamp,请参阅SQL Server联机丛书中的引用:

  

SQL Server时间戳数据类型具有   与时间或日期无关。 SQL   服务器时间戳是二进制数   表示相对序列   哪些数据修改发生在   一个数据库。时间戳数据类型   最初实施是为了支持   SQL Server恢复算法。

     

它进一步说明从不使用时间戳   键中的列,尤其是主键   键,因为时间戳值   每次行都会更改   修改。