以下各部分讨论 Microsoft SQL Server JDBC Driver 的新增功能。
JDBC Driver 3.0 的新增功能
Microsoft SQL Server JDBC Driver 3.0 包含若干新增功能和增强功能。
驱动程序名称
JDBC 驱动程序的新版本为 Microsoft SQL Server JDBC Driver 3.0。
支持在 SQL Server 2008 中引入的 SQL Server 2008 时间和日期数据类型
Microsoft SQL Server JDBC Driver 3.0 现在支持以下 SQL Server 数据类型:
-
time
-
date
-
datetime2
-
datetimeoffset
有关这些 SQL Server 类型的详细信息,请参阅
新增了 DateTimeOffset 类 类型以及允许您访问 datetimeoffset 列中的值的函数:
配置如何将 java.sql.Time 值发送到服务器
新增了 sendTimeAsDatetime 连接属性。sendTimeAsDatetime 确定如何将 java.sql.Time 值发送到服务器,即作为 SQL Server time 还是 datetime 值发送。
有关使用 sendTimeAsDatetime 连接属性的详细信息,请参阅设置连接属性。
有关将 java.sql.Time 类型发送到服务器的详细信息,请参阅配置如何将 java.sql.Time 值发送到服务器。
您可以通过编程使用 SQLServerDataSource.setSendTimeAsDatetime 修改 sendTimeAsDatetime 连接属性的值。
完全支持 MERGE 操作
以下方法现在返回针对 MERGE 操作更新的正确行数:
-
SQLServerStatement.executeUpdate
-
SQLServerStatement.getUpdateCount
-
SQLServerPreparedStatement.executeUpdate
-
SQLServerPreparedStatement.getUpdateCount(从 SQLServerStatement 继承)
-
SQLServerCallableStatement.executeUpdate(从 SQLServerPreparedStatement 继承)
-
SQLServerPreparedStatement.getUpdateCount(从 SQLServerStatement 继承)
对于日期和时间类型不支持 getBytes、setBytes 和 updateBytes
在 Microsoft SQL Server JDBC Driver 2.0 中,您可以使用 SQLServerCallableStatement.getBytes、SQLServerCallableStatement.setBytes、SQLServerResultSet.getBytes 或 SQLServerResultSet.updateBytes 将字节数组值和 SQL Server 数据类型 date、time、datetime2 或 datetimeoffset 的值相互转换。在 SQL Server JDBC Driver 3.0 中,对于这些数据类型使用上述方法将导致异常,指出不支持该转换。
getObject 返回日期或时间对象
在 Microsoft SQL Server JDBC Driver 2.0 中,使用 SQLServerCallableStatement.getObject 或 SQLServerResultSet.getObject 检索 date、time、datetime2 或 datetimeoffset 类型的值时,会返回 java.lang.String 类型的对象。
在 SQL Server JDBC Driver 3.0 中:
-
date 类型的值将作为 java.sql.Date 对象返回。
-
time 类型的值将作为 java.sql.Time 对象返回。
-
datetime2 类型的值将作为 java.sql.Timestamp 对象返回。
-
datetimeoffset 类型的值将作为 microsoft.sql.DateTimeOffset 对象返回。
列行为更改
在 SQL Server JDBC Driver 3.0 中,对于某些列 SQLServerDatabaseMetaData.getColumns 将返回不同于早期驱动程序版本的值。有关详细信息,请参阅 SQLServerDatabaseMetaData.getColumns。
SQLServerResultSetMetaData 中的以下方法也会发生行为更改:
接口
新增了以下接口:
-
ISQLServerCallableStatement
-
ISQLServerConnection
-
ISQLServerDataSource
-
ISQLServerPreparedStatement
-
ISQLServerResultSet
-
ISQLServerStatement
有关详细信息,请参阅包装和接口。
今后不推荐使用的类构造函数
在 SQL Server JDBC Driver 3.0 发行版中,Microsoft 公布了在将来的发行版中不推荐使用的几个类中的构造函数。Microsoft 不希望开发人员直接实例化这些类型的实例。
在 SQL Server JDBC Driver 3.0 发行版中还可以使用这些类的构造函数。
在 SQL Server JDBC Driver 3.0 发行版中,以下类具有相应的接口。如果您需要访问驱动程序特定的方法或常量,请使用接口来代替类:
-
SQLServerCallableStatement 类(相应的接口是 ISQLServerCallableStatement 接口)
-
SQLServerConnection 类(相应的接口是 ISQLServerConnection 接口)
-
SQLServerPreparedStatement 类(相应的接口是 ISQLServerPreparedStatement 接口)
-
SQLServerResultSet 类(相应的接口是 ISQLServerResultSet 接口)
-
SQLServerStatement 类(相应的接口是 ISQLServerStatement 接口)
在将来的发行版中,将不推荐使用以下类的构造函数,并且它们没有相应的接口,因为这些类不公开 SQL Server 特定的函数:
SQLServerDataSource.getReference 不再包含 Password 或 trustStorePassword
在 JDBC Driver 3.0 之前,如果对 SQLServerDataSource 对象调用 SQLServerDataSource.setPassword,密码将会显示在 SQLServerDataSource.getReference 所返回的对象中,这样会允许使用该对象建立其他连接。在 JDBC Driver 3.0 中,您在使用 SQLServerDataSource.getReference 返回的对象建立连接前,将需要设置该对象的密码。
而且,如果您在绑定数据源属性前设置 SQLServerDataSource.setTrustStorePassword,在获取连接前必须调用 SQLServerDataSource.setTrustStorePassword。有关详细信息,请参阅 SQLServerDataSource.getReference。
稀疏列支持
当您连接到 SQL Server 2008 或更高版本的服务器时,SQL Server JDBC Driver 3.0 支持稀疏列。有关详细信息,请参阅稀疏列。
大型用户定义类型 (UDT)
已经新增了对大于 8 KB 的 UDT 的支持。有关详细信息,请参阅用户定义类型。