如果使用 java.sql.Time 对象或 java.sql.Types.TIME JDBC 类型设置参数,可以配置如何将 java.sql.Time 值发送到服务器,即作为 SQL Servertime 类型还是 datetime 类型发送。
使用以下方法之一时适用此方案:
可以通过使用 sendTimeAsDatetime 连接属性配置如何发送 java.sql.Time 值。有关详细信息,请参阅设置连接属性。
您可以通过编程使用 SQLServerDataSource.setSendTimeAsDatetime 修改 sendTimeAsDatetime 连接属性的值。
早于 SQL Server 2008 的 SQL Server 版本不支持 time 数据类型,因此使用 java.sql.Time 的应用程序一般将 java.sql.Time 值作为 datetime 或 smalldatetimeSQL Server 数据类型存储。
如果您想要在处理 java.sql.Time 值时使用 datetime 和 smalldatetimeSQL Server 数据类型,则应该将 sendTimeAsDatetime 连接属性设置为 true。如果您想要在处理 java.sql.Time 值时使用 timeSQL Server 数据类型,则应该将 sendTimeAsDatetime 连接属性设置为 false。
请注意,在将 java.sql.Time 值发送给其数据类型还存储日期的参数时,默认日期会有所不同,具体取决于 java.sql.Time 值是作为 datetime (1/1/1970) 还是 time (1/1/1900) 值发送。有关将数据发送到 SQL Server 时的数据转换的详细信息,请参阅使用日期和时间。
在 SQL Server JDBC Driver 3.0 中,默认情况下 sendTimeAsDatetime 为 true。在将来的发行版中,默认情况下可以将 sendTimeAsDatetime 连接属性设置为 false。
为了确保无论 sendTimeAsDatetime 连接属性的默认值为什么您的应用程序都能正常工作,可以:
在使用 timeSQL Server 数据类型时使用 java.sql.Time。
在使用 datetime、smalldatetime 和 datetime2SQL Server 数据类型时使用 java.sql.Timestamp。