JDBC学习笔记(五)

来源:互联网 发布:淘宝网儿童服装女装棉 编辑:程序博客网 时间:2024/06/12 01:06

JDBC学习笔记(五)

Thinkersky[Email:yanghuangming@rongji.com]

◆  爸爸今天打了我两次,第一次是因为看见了我手里两分的成绩单,第二次是因为成绩单是他小时候的。

◆  悲剧好比是我不小心切掉了自己的小手指;喜剧好比是你不小心掉进了下水道。

◆  下面,我将公布史密斯先生的遗嘱,在公布遗嘱之前,我想满怀诚意地问一句,史密斯夫人,您是否愿意接受我的求婚?

◆  我不明白,你为什么放着值钱的东西不偷,却偏偏去偷那些不值钱的东西呢? 

   小偷:够啦!就为这个,老婆都数落我一个多月啦。

 

恩,这是今天抽空在公司论坛上看到的几条搞笑短信,拿出来与大家一起分享。

 

今天比较忙,学的东西相对比较少,只是稍微复习了一下JAVASQL之间数据类型的转化。想必大家都知道,JavaSQL各自有一套自己定义的数据类型(jsp的数据类型实际上就是Java的数据类型),我们要在Jsp程序和数据库管理系统之间正确的交换数据,必然要将二者的数据类型进行转换。先让我们来看两个表:

SQLJava数据类型影射表

SQL 数据类型

    JAVA数据类型

CHAR

String

VARCHAR

String

LONGVARCHAR

String

NUMERIC

java.math.BigDecimal

DECIMAL

java.math.BigDecimal

BIT

Boolean

TINYINT

Byte

SMALLINT

Short

INTEGER

Int

BIGINT

Long

REAL

Float

FLOAT

Double

DOUBLE

Double

BINARY

byte[]

VARBINARY

byte[]

LONGVARBINARY

byte[]

DATE

java.sql.Date

TIME

java.sql.Time

TIMESTAMP

java.sql.Timestamp

 

 

 

 

 

 

  JavaSQL数据类型影射表

JAVA数据类型

SQL 数据类型

String

VARCHAR or LONGVARCHAR

java.math.BigDecimal

NUMERIC

Boolean

BIT

Byte

TINYINT

Short

SMALLINT

Int

INTEGER

Long

BIGINT

Float

REAL

Double

DOUBLE

byte[]

VARBINARY or LONGVARBINARY

java.sql.Date

DATE

java.sql.Time

TIME

java.sql.Timestamp

TIMESTAMP

 

这里,大伙要注意了,并不是所有的数据类型在各种数据库管理系统中都被支持。下面,就几种常用的数据类型之间的转化进行说明:

 

(1)      CHAR, VARCHAR, LONGVARCHAR

 

SQL语言中,有三种分别表示不同长度的字符类型CHAR, VARCHAR, LONGVARCHAR,在Java/Jsp中并没有相应的三种不同的数据类型与之一一对应,JDBC的处理方法是将其与String或者char[]对应起来。在实际编程中不必对着三种SQL数据类型进行区分,全部将他们转化为Sting或者char[]就可以了。而且通常使用应用的非常普遍的String类型。我们还可以利用String类提供的方法将一个String对象转化为char[],或者用char[]为参数构造一个Stirng对象。

对于定长度的SQL数据类型CHAR(n),当从数据库管理系统中获得的结果集提取该类型的数据时,JDBC会为其构造一个长度为nString对象来代表他,如果实际的字符个数不足n,系统会自动为String对象补上空格。当向数据库管理系统写入的数据类型应该是CHAR(n)时,JDBC也会将该String对象的末尾补上相应数量的空格。

一般情况下,CHAR, VARCHAR, LONGVARCHARString之间可以无差错的进行转换。但非常值得注意的是LONGVARCHAR,这种SQL的数据类型有时在数据库中代表的数据可能有几兆字节的大小,超过了String对象的承受范围。JDBC解决的办法是用JavaInput Stream来接受这种类型的数据[以后我们回涉及到]Input Stream不仅支持ASCII,而且支持Unicode,我们可以根据需要进行选择。

 

(2)      DECIMAL NUMERIC

 

SQLDECIMAL NUMERIC通常用来表示需要一定精度的定点数。在Java的简单数据类型中,没有一种类型与之相对应。但从JDK1.1开始,Sun公司在java.math.*包中加入了一个新的类BigDecimal,该类的对象可以与DECIMAL NUMERIC进行转换。

另外,当从数据库管理系统中读取数据时,还可以用getString()方法来获取DECIMAL NUMERIC

 

(3)      BINARY, VARBINARY, LONGVARBINARY

 

在编程时无须精确区分这三种SQL数据类型,JDBC将他们统一影射为byte[]。其中LONGVARBINARYLONGVARCHAR相似,可以代表几兆字节的数据,超出数组的承受范围。解决的办法依然是用Input Stream来接受数据。

 

(4)      BIT

 

代表一个二进制位的BIT类型被JDBC影射为boolean型。

 

(5)      TINYINT, SMALLINT, INTEGER, BIGINT

 

SQL语言的TINYINT, SMALLINT, INTEGER, BIGINT分别代表8位、16位、32位、64位的数据。他们分别被影射为Javabyte, short, int, long

 

(6)      REAL, FLOAT, DOUBLE

 

SQL定义了REAL, FLOAT,  DOUBLE来支持浮点数。JDBCREAL影射到Javafloat,FLOAT,DOUBLE影射到javadouble

 

(7)      DATE, TIME, TIMESTAMP

 

SQL定义了三种和日期相关的数据类型。 DATE代表年、月、日,TIME代表时、分、秒,TIMESTAMP结合了DATETIME的全部信息,而且增加了更加精确的时间计量单位。

java的标准类库中,java.util.*包中的Date类用来表示日期和时间。但是该类和SQL中的DATE, TIME, TIMESTAMP直接影射关系并不清晰。并且,该类也不支持TIMESTAMP的精确时间计量单位。因此,Sun公司在java.sql.*中为java.util.Date增加了三个子类:java.sql.Datejava.sql.Time java.sql.Timestamp,分别与SQL中的三个日期数据类型相对应。

 

总之,关于SQLJAVA之见数据类型的转化,还有很多细节方面的东西,这里就不一一介绍了,有需要的朋友自己可以去查一下相关文档。这里给大家介绍一个我常去的网站:

http://java.sun.com/docs/books/tutorial/jdbc