SQLServer类型与Java类型转换问题解决
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ResultSet 接口提供用于从当前行获取列值的获取方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。
对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到ResultSet 获取方法所使用的 Java 类型的映射关系。
用查询从包含 sqlvariant 数据类型列的表中检索数据,则会发生异常。
Getter 方法转换
基于 SQL Server 2005 的数据类型,以下图表包含 SQLServerResultSet 类的get
JDBC 驱动程序的 getter 方法支持三种基本的转换类别:
∙Non-Lossy (x):在 getter 类型等于或小于基础服务器类型的情况下执行转换。例如,对基础服务器的十进制数列调用getBigDecimal时,
无需进行转换。
∙Converted (y):从数字服务器类型到 Java 语言类型的转换,此时的转换为常规转换,并遵循 Java 语言转换规则。对于这些转换,总是
直接截取有效位数(从不四舍五入),而溢出则按目标类型取模处理,
以较小者为准。例如,对包含“1.9999”的基础十进制数列调用
getInt将返回“1”;如果基础十进制数值为“3000000000”,则 int
值将溢出为“-1294967296”。
Data Dependent (z):从基础字符类型转换到数字类型时,要求字符类型所包含的值可转换成数字类型。不执行其他转换。如果值对于
getter 类型过大,则该值无效。例如,如果对包含“53”的
varchar(50) 列调用getInt,则该值作为 int 返回;但如果基础值
为“xyz”或“3000000000”,则发生错误。
(摘自微软的sqljdbc帮助文档)
1. ResultSet中对于getDouble,getFloat,getInt方法由于返回的是基本类型数据,所以null变为了0(如果值为 SQL NULL ,则返回值为 0 )。这给我们带来了不少麻烦。为了避免这个问题需要借助ResultSet#wasNull()方法
2. ResultSet#getDate。以前没注意过这个家伙返回的类型是java.sql.Date,发现数据库字段类型为datetime时返回来的数据只有年月日,用
ResultSet#getTimestamp就没问题,郁闷,到现在还不知道为什么。
3. 相关资源:
/products/jdbc/overview.html
/zh-cn/data/aa937724(en-us).aspx