Настройка отправки значений java.sql.Time
Если для задания параметра используется объект java.sql.Time или тип JDBC java.sql.Types.TIME, можно настроить способ отправки значения java.sql.Time на сервер; либо в качестве типа времени SQL Server, либо в качестве типа даты и времени.
Этот сценарий применяется в случае использования одного из следующих методов:
- SQLServerCallableStatement.registerOutParameter(int, int)
- SQLServerCallableStatement.registerOutParameter(int, int, int)
- SQLServerCallableStatement.setTime
- SQLServerPreparedStatement.setTime
- SQLServerCallableStatement.setObject
- SQLServerPreparedStatement.setObject
SendTimeAsDatetime
Порядок отправки значения java.sql.Time можно настроить с помощью свойства соединения sendTimeAsDatetime. Дополнительные сведения: Задание свойств соединения.
Значение свойства соединения sendTimeAsDatetime можно изменить программным образом с помощью SQLServerDataSource.setSendTimeAsDatetime.
Версии SQL Server раньше, чем SQL Server 2008 (10.0.x), не поддерживают тип данных времени , поэтому приложения, использующие java.sql.Time, обычно хранят значения java.sql.Time как типы данных datetime или smalldatetime SQL Server.
Если вы хотите использовать типы данных SQL Server datetime и smalldatetimeпри работе со значениями java.sql.Time, необходимо задать для свойства подключения sendTimeAsDatetime значение true. Если вы хотите использовать тип данных SQL Server во время работы со значениями java.sql.Time, необходимо задать для свойства подключения sendTimeAsDatetime значение false.
Если значения java.sql.Time передаются в параметр, тип данных которого также поддерживает хранение дат, эти даты по умолчанию будут отличаться в зависимости от того, как отправляется значение java.sql.Time: как datetime (01.01.1970) или как time (01.01.1900). Дополнительные сведения о преобразованиях данных при отправке данных в SQL Server см. в разделе "Использование данных даты и времени".
В SQL Server JDBC Driver 3.0 значение sendTimeAsDatetime по умолчанию равно true. В следующей версии свойство соединения sendTimeAsDatetime может иметь значение false по умолчанию.
Чтобы гарантировать, что приложение будет работать ожидаемым образом независимо от значения по умолчанию для свойства соединения sendTimeAsDatetime, можно выполнить следующие действия.
- Используйте java.sql.Time при работе с типом данных SQL Server.
- Используйте java.sql.Timestamp при работе с типами данных datetime, smalldatetime и datetime2SQL Server.
SendTimeAsDatetime должен иметь значение FALSE для зашифрованных столбцов, так как они не поддерживают преобразование типа time в datetime. Начиная с Microsoft JDBC Driver 6.0 для SQL Server, класс SQLServerConnection содержит два следующих метода для задания и получения значений свойства sendTimeAsDatetime.
public boolean getSendTimeAsDatetime()
public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue)