Configuración del modo en el que se envían los valores java.sql.Time
Si usa un objeto java.sql.Time o el tipo de JDBC java.sql.Types.TIME para establecer un parámetro, podrá configurar la forma en que el valor java.sql.Time se envía al servidor; es decir, como un tipo time o un tipo datetime de SQL Server.
Este escenario se aplica al utilizar uno de los siguientes métodos:
- SQLServerCallableStatement.registerOutParameter(int, int)
- SQLServerCallableStatement.registerOutParameter(int, int, int)
- SQLServerCallableStatement.setTime
- SQLServerPreparedStatement.setTime
- SQLServerCallableStatement.setObject
- SQLServerPreparedStatement.setObject
SendTimeAsDatetime
Puede configurar la forma de enviar el valor java.sql.Time mediante el uso de la propiedad de conexión sendTimeAsDatetime. Para obtener más información, vea Establecer las propiedades de conexión.
Puede modificar mediante programación el valor de la propiedad de conexión sendTimeAsDatetime con SQLServerDataSource.setSendTimeAsDatetime.
Las versiones de SQL Server anteriores a SQL Server 2008 (10.0.x) no admiten el tipo de datos time, por ello, las aplicaciones que usen java.sql.Time por lo general almacenan valores de java.sql.Time como tipos de datos datetime o smalldatetime de SQL Server.
Si quiere usar los tipos de datos datetime y smalldatetime de SQL Server cuando trabaje con valores java.sql.Time, debería establecer la propiedad de conexión sendTimeAsDatetime en true. Si quiere usar el tipo de datos time de SQL Server cuando trabaje con valores java.sql.Time, debería establecer la propiedad de conexión sendTimeAsDatetime en false.
Al enviar valores java.sql.Time a un parámetro cuyo tipo de datos también pueda almacenar fechas, esos valores predeterminados de fecha serán distintos en función de si el valor java.sql.Time se envía como un valor datetime (1/1/1970) o un valor time (1/1/1900). Para más información sobre las conversiones de datos al enviar datos a SQL Server, vea Usar datos de fecha y hora.
En JDBC Driver 3.0 de SQL Server, sendTimeAsDatetime es true de forma predeterminada. En versiones futuras, la propiedad de conexión sendTimeAsDatetime puede establecerse de forma predeterminada en False.
Para asegurarse de que su aplicación sigue funcionando como se había previsto independientemente del valor predeterminado de la propiedad de conexión sendTimeAsDatetime, puede:
- Usar java.sql.Time al trabajar con el tipo de datos time de SQL Server.
- Use java.sql.Timestamp al trabajar con los tipos de datos datetime, smalldatetime y datetime2 de SQL Server.
SendTimeAsDatetime debe ser false para las columnas cifradas, ya que estas no admiten la conversión de time a datetime. A partir de Microsoft JDBC Driver 6.0 para SQL Server, la clase SQLServerConnection tiene los dos métodos siguientes para establecer u obtener el valor de la propiedad sendTimeAsDatetime.
public boolean getSendTimeAsDatetime()
public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue)