ResultSet 接口提供用于从当前行获取列值的获取 方法(getBoolean、getLong 等)。可以使用列的索引编号或列的名称获取值。一般情况下,使用列索引较为高效。列从 1 开始编号。为了获得最大的可移植性,应该按从左到右的顺序读取每行中的结果集列,每列只能读取一次。
对于获取方法,JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,并返回适当的 Java 值。JDBC 规范有一个表,显示允许的从 SQL 类型到 ResultSet 获取方法所使用的 Java 类型的映射关系。

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

注意: JDBC 驱动程序目前不支持 SQL Server sqlvariant 数据类型。如果使用查询从包含 sqlvariant 数据类型列的表中检索数据,则会发生异常。

Getter 方法转换

基于 SQL Server 2005 的数据类型,以下图表包含 SQLServerResultSet 类的 get<Type> 方法的 JDBC 驱动程序转换图,以及 SQLServerCallableStatement 类的 get<Type> 方法支持的转换。

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. 相关资源:

http://java.sun.com/products/jdbc/overview.html

http://msdn.microsoft.com/zh-cn/data/aa937724(en-us).aspx

SQLServer类型与Java类型转换问题解决的更多相关文章

  1. Java JDBC中,MySQL字段类型到JAVA类型的转换

    1. 概述 在使用Java JDBC时,你是否有过这样的疑问:MySQL里的数据类型到底该选择哪种Java类型与之对应?本篇将为你揭开这个答案. 2. 类型映射  java.sql.Types定义了常 ...

  2. MySql 字段类型对应 Java 实体类型

    前言 MySQL Connector/J 对于 MySql 数据类型和 Java 数据类型之间的转换是很灵活的: 一般来讲,任何 MySql 数据类型都可以被转换为一个 java.lang.Strin ...

  3. Java 类型转换精度问题

    基本数据类型占用内存大小 最近项目中修复了一个关于类型转换精度丢失的问题,以前对于类型转换会丢失精度只知其然,不知其所以然,这次了解了下相关原理,也分享给大家.先来回顾一下 Java 的基本数据类型中 ...

  4. Java类型转换详解

    Java类型转换详解 最近有同学问:自动类型转换老是记不住,到底是大转小,还是小转大 其实这个不用死记硬背,很好理解,我们拿 int 和 short 来举例: int 是 4 字节,也就是 32 bi ...

  5. java类型转换

    //java类型转换public class Demo2 { public static void main(String[] args){ int num1 = 55; int num2 =77; ...

  6. SQLServer访问Oracle查询性能问题解决

    原文:SQLServer访问Oracle查询性能问题解决 1. 问题 系统有个模块,需要查询Oracle数据库中的数据.目前是通过建立链接服务器实现的. SQLServer访问Oracle实现 可参考 ...

  7. java.sql.Types,数据库字段类型,java数据类型的对应关系

    以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增减. 本概述是从<JDBCTM Database Access from Java ...

  8. 列举两种不同类型的Java标识注释,并解释它们之间的区别。

    列举两种不同类型的Java标识注释,并解释它们之间的区别.

  9. MYSQL类型与JAVA类型对应表

    MYSQL类型与JAVA类型对应表: 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) VARCHAR L+N VARCHAR java.lang.String 12 CHAR ...

随机推荐

  1. C语言精要总结-指针系列(一)

    考虑到指针内容繁多,这里将指针作为一个系列,从简入繁,一点一点深挖并掌握这C语言的精华.初步计划如下 此文为指针系列第一篇: C语言精要总结-指针系列(一) 内存与地址 我们可以把内存看做一排连续的房 ...

  2. 如何使用angularJs

    本期更新,博主将给大家分享一些AngularJs常用的一些属性和方法,AngularJS 是由 Google 的员工 Miško Hevery 从 2009 年开始着手开发.这是一个非常好的构想,该项 ...

  3. Excel 数据导入(OleDb)

    @using (Html.BeginForm("Student", "Excel", FormMethod.Post, new { enctype = &quo ...

  4. UI—视图的生命周期

  5. fopen的使用小记

    整理自https://msdn.microsoft.com/zh-cn/library/t3ayayh1(VS.80).aspx errno, _doserrno, _sys_errlist, and ...

  6. MySQL数据库操作常用命令

    MySQL数据库操作常用命令DOS连接数据库1.安装MySQL配置好环境2.运行cmd命令net start mysql3.找到mysql文件根目录输入命令mysql -h localhost -u ...

  7. 连锁反应confirm

    <script> function del(){ var flag = confirm("你真要删除么?"); if( flag ){ alert("我已被你 ...

  8. 关于Java解压文件的一些坑及经验分享(MALFORMED异常)

    文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...

  9. Log4j2 — Log4j2导入、LogEvent、配置文件编写及路径

    1. Log4j2的导入 首先到http://logging.apache.org/log4j/2.x/download.html 上下载最新的log4j2的jar包,然后再eclipse中加入log ...

  10. netsh & winsock & 对前端的影响

    netsh 与 winsock 一个是window的脚本工具,另一个则是window是网络编程中要用到的网络接口,而非要说跟我小小的前端有什么影响,那还真有...,当然这个影响是很不好的,比如node ...