1. ResultSet中对于getDouble,getFloat,getInt方法由于返回的是基本类型数据,所以null变为了0(如果值为 SQL NULL
,则返回值为 0
)。这给我们带来了不少麻烦。为了避免这个问题需要借助ResultSet#wasNull()方法
java.sql.Date,数据库字段类型为datetime时返回来的数据只有年月日,用
ResultSet#getTimestamp才能返回完整的日期的和时间
SQL Server 类型 | JDBC 类型 (java.sql.类型) | Java 语言类型 |
---|---|---|
bigint | BIGINT | long |
timestamp binary | BINARY | byte[] |
bit | BIT | Boolean |
charnchar | CHAR | String |
decimal money smallmoney | DECIMAL | java.math.BigDecimal |
float | DOUBLE | double |
int | INTEGER | int |
image | LONGVARBINARY | byte[] |
text ntext | LONGVARCHAR | String |
numeric | NUMERIC | java.math.BigDecimal |
real | REAL | float |
smallint tinyint | SMALLINT | short |
datetime smalldatetime | TIMESTAMP | java.sql.Timestamp |
varbinary | VARBINARY | byte[] |
varchar nvarchar uniqueidentifier | VARCHAR | String |
Java 编程语言数据类型和 SQL Server 2005 数据类型之间存在很多差异。Microsoft SQL Server 2005 JDBC Driver 通过各种类型的转换来帮助消除这些差异。
字符类型
JDBC 字符串数据类型为 CHAR、VARCHAR 和 LONGVARCHAR。
类型 | 说明 |
---|---|
Fixed-length | SQL Server char 和 nchar 数据类型直接映射到 JDBC CHAR 类型。这些都是在列具有 SET ANSI_PADDING ON 的情况下,具有由服务器提供的填充的固定长度的类型。对于 nchar,填充始终是打开的,但对于 char,在未填充服务器字符列的情况下,JDBC 驱动程序将添加填充。 |
Variable-length | SQL Server varchar 和 nvarchar 类型直接映射到 JDBC VARCHAR 类型。 |
Long | SQL Server text 和 ntext 类型映射到 JDBC LONGVARCHAR 类型。对于 SQL Server 2005 来说,这些类型已过时,因此应改用大值类型。 针对 text 和 ntext 服务器列使用 update<Numeric Type> 和 updateObject (int, java.lang.Object) 方法时将失败。然而,对于 text 和 ntext 服务器列,支持将 setObject 方法用于指定的字符转换类型。 |
二进制字符串类型
JDBC 二进制字符串类型为 BINARY、VARBINARY 和 LONGVARBINARY。
类型 | 说明 |
---|---|
固定长度 | SQL Server binary 类型直接映射到 JDBC BINARY 类型。这是在列具有 SET ANSI_PADDING ON 的情况下,具有由服务器提供填充的固定长度类型。没有填充服务器 char 列时,JDBC 驱动程序会添加填充。 SQL Server timestamp 类型是具有 8 个字节的固定长度的 JDBC BINARY 类型。 |
可变长度 | SQL Server varbinary 类型映射到 JDBC VARBINARY 类型。 |
Long | SQL Server image 类型映射到 JDBC LONGVARBINARY 类型。对于 SQL Server 2005 来说,该类型已过时,因此应改用大值类型。 SQL Server 2005 中的 udt 类型作为 LONGBINARY 类型映射到 JDBC。 |
精确数字类型
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 money 和 smallmoney 类型,这些类型是特定的固定精度的十进制类型,分别以 8 个字节和 4 个字节进行存储。 |
近似数字类型
JDBC 近似数值数据类型为 REAL、DOUBLE 和 FLOAT。
类型 | 说明 |
---|---|
REAL | JDBC REAL 类型具有 7 位精度(单精度)并直接映射到 SQL Server real 类型。 |
DOUBLE | JDBC DOUBLE 类型具有 15 位精度(双精度)并直接映射到 SQL Server float 类型。JDBC FLOAT 类型是 DOUBLE 的同义词。由于 FLOAT 与 DOUBLE 之间可能存在冲突,因此 DOUBLE 为首选类型。 |
日期时间类型
JDBC TIMESTAMP 类型映射到 SQL Server datetime 和 smalldatetime 类型。datetime 类型以两个 4 字节整数进行存储。smalldatetime 类型可存放相同的信息(日期和时间),但精度较低,为两个 2 字节的小整数。
注意: |
---|
SQL Server timestamp 类型是固定长度的二进制字符串类型。它不映射到任何 JDBC 时间类型:DATE、TIME 或 TIMESTAMP。 |
自定义类型映射
JDBC 驱动程序中未实现将 SQLData 接口用于 JDBC 高级类型(UDT、Struct 等)的 JDBC 自定义类型映射功能。