配置 java.sql.Time 值的发送方式

下载 JDBC 驱动程序

如果使用 java.sql.Time 对象或 java.sql.Types.TIME JDBC 类型来设置参数,可以配置如何将 java.sql.Time 值发送到服务器,即是作为 timeSQL Server 类型发送,还是作为 datetime 类型发送。

使用以下方法之一时适用此方案:

SendTimeAsDatetime

可以通过使用 sendTimeAsDatetime 连接属性配置如何发送 java.sql.Time 值。 有关详细信息,请参阅设置连接属性

可以通过编程使用 SQLServerDataSource.setSendTimeAsDatetime 修改 sendTimeAsDatetime 连接属性的值

低于 SQL Server 2008 (10.0.x) 的 SQL Server 版本不支持 time 数据类型,因此使用 java.sql.Time 的应用程序通常会将 java.sql.Time 值作为 datetime 或 smalldatetime SQL Server 数据类型进行存储。

若要在处理 java.sql.Time 值时使用 datetime 和 smalldatetimeSQL 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 驱动程序 3.0 中,sendTimeAsDatetime 默认设为 true。 在将来的发行版中,默认情况下可以将 sendTimeAsDatetime 连接属性设置为 false

为了确保无论 sendTimeAsDatetime 连接属性的默认值为什么,应用程序都能正常工作,可以

  • 在使用 timeSQL Server 数据类型时使用 java.sql.Time。
  • 处理 datetime、smalldatetime 和 datetime2SQL Server 数据类型时,请使用 java.sql.Timestamp。

SendTimeAsDatetime 必须对加密列设为 false,因为加密列不支持从 time 转换为 datetime。 自 Microsoft JDBC Driver 6.0 for SQL Server 起,SQLServerConnection 类包含以下两种方法,可用于设置/获取 sendTimeAsDatetime 属性的值。

  public boolean getSendTimeAsDatetime()
  public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue)

另请参阅

了解 JDBC 驱动程序数据类型