Java 编程语言数据类型和 SQL Server 数据类型之间存在很多差异。Microsoft SQL Server JDBC Driver 通过各种类型的转换来帮助消除这些差异。

字符类型

JDBC 字符串数据类型为 CHARVARCHARLONGVARCHAR。从 Microsoft SQL Server JDBC Driver 2.0 开始,JDBC Driver 对 JDBC 4.0 API 提供支持。在 JDBC 4.0 中,JDBC 字符串数据类型也可以是 NCHARNVARCHARLONGNVARCHAR。这些新的字符串类型以 Unicode 格式维护 Java 本机字符类型,从而不必执行任何 ANSI 到 Unicode 或 Unicode 到 ANSI 的转换。

类型 说明

Fixed-length

SQL Server charnchar 数据类型直接映射到 JDBC CHARNCHAR 类型。这些都是在列具有 SET ANSI_PADDING ON 的情况下,具有由服务器提供的填充的固定长度的类型。对于 nchar,填充始终是启用的,但对于 char,在未填充服务器字符列的情况下,JDBC Driver 将添加填充。

Variable-length

SQL Server varcharnvarchar 类型分别直接映射到 JDBC VARCHARNVARCHAR 类型。

Long

SQL Server textntext 类型分别映射到 JDBC LONGVARCHARLONGNVARCHAR 类型。从 SQL Server 2005 开始不推荐使用这些类型,因此应改用大值类型 varchar(max)nvarchar(max)

针对 textntext 服务器列使用 update<Numeric Type>updateObject (int, java.lang.Object) 方法时将失败。然而,对于 textntext 服务器列,支持将 setObject 方法用于指定的字符转换类型。

二进制字符串类型

JDBC 二进制字符串类型为 BINARYVARBINARYLONGVARBINARY

类型 说明

固定长度

SQL Server binary 类型直接映射到 JDBC BINARY 类型。这是在列具有 SET ANSI_PADDING ON 的情况下,具有由服务器提供填充的固定长度类型。没有填充服务器 char 列时,JDBC 驱动程序会添加填充。

SQL Server timestamp 类型是具有 8 个字节的固定长度的 JDBC BINARY 类型。

Variable-length

SQL Server varbinary 类型映射到 JDBC VARBINARY 类型。

SQL Server 中的 udt 类型作为 VARBINARY 类型映射到 JDBC。

Long

SQL Server image 类型映射到 JDBC LONGVARBINARY 类型。从 SQL Server 2005 开始不推荐使用此类型,因此应改用大值类型 varbinary(max)

精确数字类型

JDBC 精确数字类型直接映射到其对应的 SQL Server 类型。

类型 说明

BIT

JDBC BIT 类型表示可能是 0 或 1 的单个位。此类型映射到 SQL Server bit 类型。

TINYINT

JDBC TINYINT 类型表示单个字节。此类型映射到 SQL Server tinyint 类型。

SMALLINT

JDBC SMALLINT 类型表示有符号的 16 位整数。此类型映射到 SQL Server smallint 类型。

INTEGER

JDBC INTEGER 类型表示有符号的 32 位整数。此类型映射到 SQL Server int 类型。

BIGINT

JDBC BIGINT 类型表示有符号的 64 位整数。此类型映射到 SQL Server bigint 类型。

NUMERIC

JDBC NUMERIC 类型表示固定精度的十进制值,它可存放相同精度的值。NUMERIC 类型映射到 SQL Server numeric 类型。

DECIMAL

JDBC DECIMAL 类型表示固定精度的十进制值,它可存放至少具有指定精度的值。DECIMAL 类型映射到 SQL Server decimal 类型。

JDBC DECIMAL 类型还映射到 SQL Server moneysmallmoney 类型,这些类型是特定的固定精度的十进制类型,分别以 8 个字节和 4 个字节进行存储。

近似数字类型

JDBC 近似数值数据类型为 REALDOUBLEFLOAT

类型 说明

REAL

JDBC REAL 类型具有 7 位精度(单精度)并直接映射到 SQL Server real 类型。

DOUBLE

JDBC DOUBLE 类型具有 15 位精度(双精度)并直接映射到 SQL Server float 类型。JDBC FLOAT 类型是 DOUBLE 的同义词。由于 FLOATDOUBLE 之间可能存在冲突,因此 DOUBLE 为首选类型。

日期时间类型

JDBC TIMESTAMP 类型映射到 SQL Server datetimesmalldatetime 类型。datetime 类型以两个 4 字节整数进行存储。smalldatetime 类型可存放相同的信息(日期和时间),但精度较低,为两个 2 字节的小整数。

注意: SQL Server timestamp 类型是固定长度的二进制字符串类型。它不映射到任何 JDBC 时间类型:DATETIMETIMESTAMP

自定义类型映射

JDBC 驱动程序中未实现将 SQLData 接口用于 JDBC 高级类型(UDT、Struct 等)的 JDBC 自定义类型映射功能。

请参阅

了解 JDBC 驱动程序数据类型