Como configurar como os valores de java.sql.Time são enviados

Baixar Driver JDBC

Se você usar um objeto java.sql.Time ou o tipo java.sql.Types.TIME do JDBC para definir um parâmetro, poderá configurar como o valor java.sql.Time é enviado ao servidor; como um tipo time ou um tipo datetime do SQL Server.

Esse cenário se aplica ao usar um dos seguintes métodos:

SendTimeAsDatetime

Configure como o valor java.sql.Time é enviado usando a propriedade de conexão sendTimeAsDatetime. Para obter mais informações, veja Configuração das propriedades de conexão.

Você pode modificar de forma programática o valor da propriedade de conexão sendTimeAsDatetime com SQLServerDataSource.setSendTimeAsDatetime.

As versões do SQL Server anteriores ao SQL Server 2008 (10.0.x) não dão suporte ao tipo de dados time, ou seja, os aplicativos que usam o java.sql.Time geralmente armazenam os valores de java.sql.Time como tipos de dados datetime ou smalldatetime do SQL Server.

Se quiser usar os tipos de dados datetime e smalldatetimeSQL Server ao trabalhar com valores java.sql.Time values, você deverá definir a propriedade de conexão sendTimeAsDatetime como true. Se quiser usar o tipo de dados time do SQL Server ao trabalhar com valores java.sql.Time, você deverá definir a propriedade de conexão sendTimeAsDatetime para false.

Quando você envia valores java.sql.Time para um parâmetro cujos tipos de dados também podem armazenar datas, as datas padrão serão diferentes dependendo de o valor java.sql.Time ser enviado como datetime (1/1/1970) ou time (1/1/1900). Para obter mais informações sobre conversões de dados ao enviar dados para um SQL Server, confira Usando dados de data e hora.

No JDBC Driver 3.0 do SQL Server, sendTimeAsDatetime é true por padrão. Em uma futura versão, a propriedade de conexão sendTimeAsDatetime poderá ser definida como falso por padrão.

Para garantir que o aplicativo continue funcionando conforme esperado, independentemente do valor padrão da propriedade de conexão sendTimeAsDatetime, você pode:

  • Usar java.sql.Time ao trabalhar com o tipo de dados timeSQL Server.
  • Use java.sql.Timestamp ao trabalhar com os tipos de dados datetime, smalldatetime e datetime2SQL Server.

SendTimeAsDatetime precisa ser false para colunas criptografadas, pois as colunas criptografadas não dão suporte à conversão de time em datetime. No Microsoft JDBC Driver 6.0 para SQL Server e versões posteriores, a classe SQLServerConnection tem os dois métodos a seguir para definir/obter o valor da propriedade sendTimeAsDatetime.

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

Confira também

Noções básicas sobre os tipos de dados do JDBC Driver