如果使用 java.sql.Time 对象或 java.sql.Types.TIME JDBC 类型设置参数,可以配置如何将 java.sql.Time 值发送到服务器,即作为 SQL Server time 类型还是 datetime 类型发送。
使用以下方法之一时适用此方案:
-
SQLServerCallableStatement.registerOutParameter(int, int)
-
SQLServerCallableStatement.registerOutParameter(int, int, int)
-
SQLServerCallableStatement.setTime
-
SQLServerPreparedStatement.setTime
-
SQLServerCallableStatement.setObject
-
SQLServerPreparedStatement.setObject
可以通过使用 sendTimeAsDatetime 连接属性配置如何发送 java.sql.Time 值。有关详细信息,请参阅设置连接属性。
您可以通过编程使用 SQLServerDataSource.setSendTimeAsDatetime 修改 sendTimeAsDatetime 连接属性的值。
早于 SQL Server 2008 的 SQL Server 版本不支持 time 数据类型,因此使用 java.sql.Time 的应用程序一般将 java.sql.Time 值作为 datetime 或 smalldatetime SQL Server 数据类型存储。
如果您想要在处理 java.sql.Time 值时使用 datetime 和 smalldatetime SQL Server 数据类型,则应该将 sendTimeAsDatetime 连接属性设置为 true。如果您想要在处理 java.sql.Time 值时使用 time SQL 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 连接属性的默认值为什么您的应用程序都能正常工作,可以:
-
在使用 time SQL Server 数据类型时使用 java.sql.Time。
-
在使用 datetime、smalldatetime 和 datetime2 SQL Server 数据类型时使用 java.sql.Timestamp。