java.sql.Time の値をサーバーに送信する方法の構成
パラメーターの設定で java.sql.Time オブジェクトまたは .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
java.sql.Time 値の送信方法を構成するには sendTimeAsDatetime 接続プロパティを使用します。詳細については、「接続プロパティの設定」を参照してください。
sendTimeAsDatetime 接続プロパティの値は、SQLServerDataSource.setSendTimeAsDatetime を使用してプログラムから変更できます。
SQL Server 2008 より前のバージョンの SQL Server では、time データ型がサポートされないため、java.sql.Time を使用しているアプリケーションは通常、datetime と smalldatetime のいずれかの SQL Server データ型として java.sql.Time 値を格納します。
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 接続プロパティの既定値に左右されないようにするための対策としては、次のような方法があります。
- SQL Server データ型の time を使用する場合は java.sql.Time を使用する。
- SQL Server データ型の datetime、smalldatetime、および datetime2 を使用する場合は java.sql.Timestamp を使用する。