設定 java.sql.Time 值的傳送方式
如果您使用 java.sql.Time 物件或 java.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
SendTimeAsDatetime
您可以設定 java.sql.Time 值如何使用 sendTimeAsDatetime 連線屬性來傳送。 如需詳細資訊,請參閱設定連線屬性。
您可以使用程式設計方式,透過 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 和 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 連線屬性的預設值為何,您可以:
- 在處理 time SQL Server 資料類型時使用 java.sql.Time。
- 處理 datetime、Smalldatetime 和 datetime2 SQL Server 資料類型時,請使用 java.Timestamp。
加密資料行的 SendTimeAsDatetime 必須為 false,因為加密資料行不支援從時間轉換成日期時間。 從 Microsoft JDBC Driver 6.0 for SQL Server 開始,SQLServerConnection 類別有下列兩種方法可設定/取得 sendTimeAsDatetime 屬性的值。
public boolean getSendTimeAsDatetime()
public void setSendTimeAsDatetime(boolean sendTimeAsDateTimeValue)