2024年4月22日发(作者:)
Sql和java数据类型映射
概述
由于SQL数据类型和Java数据类型是不同的,因此需要某种机制在使用Java类型的应
用程序和使用SQL类型的数据库之间来读写数据。
为此,JDBC提供了getXXX和setXXX方法集、方法registerOutParameter和类Types。
本章汇集了影响各种类和接口的数据类型的有关信息,并列出所有的对应关系表(这些表显
示了SQL类型和Java类型之间的映射关系)以便于参考。
8.2将SQL数据类型映射为Java类型
不幸的是,不同数据库产品所支持的SQL类型之间有很大的不同。即使不同的数据库以相
同的语义支持SQL类型,它们也可能用不同的名称。例如,绝大多数的主流数据库都支持
一种表示大型二进制值的SQL类型,但Oracle把这种类型叫做LONGRAW,Sybase把
它叫做IMAGE,Informix却把它叫做BYTE,而DB2又把它叫做LONGVARCHARFOR
BITDATA。
幸运的是,JDBC程序员通常并不需要自己去关心目标数据库所用的实际SQL类型的名
称。大多数时候,JDBC程序员将根据一些现有的数据库表来进行编程。他们无须关心用于
创建这些表的确切SQL类型的名称。
JDBC在类中定义了一系列的常规SQL类型标识符。这些类型可用于表示
那些最为常用的SQL类型。在用JDBCAPI编程时,程序员通常可以使用这些JDBC类
型来引用一般的SQL类型,而无须关心目标数据库所用的确切SQL类型的名称。在下一
节中将对这些JDBC类型进行仔细说明。
程序员用到SQL类型名称的主要地方是在用SQL的CREATETABLE语句创建新的数
据库表时。这种情况下,程序员必须注意应该使用目标数据库所支持的SQL类型名称。如
果需要知道各种SQL类型在某个特定的数据库中的行为的确切定义,我们建议查阅一下数
据库文档。
如果想要编写一种可在各种数据库上创建表的可移植JDBC程序,用户主要有两个选择。
第一个选择是:限制自己只使用那些被广为接受的SQL类型名称(例如INTEGER、
NUMERIC或VARCHAR)。这些类型有可能能适应所有的数据库。第二个选择是:用
eInfo方法来找出给定的数据库实际上支持哪些SQL类
型,然后选择与给定JDBC类型相匹配的特定于数据库的SQL类型名。
JDBC定义了一个从JDBC数据库类型到Java类型的标准映射。例如,JDBC的
INTEGER类型通常映射为Java的int类型。这可支持简单的接口,将JDBC值读写为简
单的Java类型。
Java类型不必与JDBC类型完全形同;它们只须能够用足够的类型信息来代表JDBC类
型,从而能正确地存储和取出参数和从SQL语句恢复结果就可以了。例如,JavaString对
象可能并不能精确地与任何JDBCCHAR类型匹配,但它却可给出足够的类型信息来成功
地表示CHAR、VARCHAR或LONGVARCHAR类型。
8.3JDBC类型
本节描述各种JDBC数据类型及其与标准SQL类型和Java类型的关联方式。
8.3.1CHAR、VARCHAR和LONGVARCHAR
JDBC类型CHAR、VARCHAR和LONGVARCHAR密切相关。CHAR表示固定长度的
小字符串,VARCHAR表示长度可变的小字符串,而LONGVARCHAR表示长度可变的大
字符串。
与JDBCCHAR对应的是SQLCHAR类型,其定义由SQL-92给出,且所有主要的数据
库都支持它。它接受用于指定字符串最大长度的参数,例如CHAR(12)即定义了一个长度
为12个字符的字符串。所有主要的数据库都支持长度达254个字符的CHAR。
与JDBCVARCHAR对应的是SQLVARCHAR类型,其定义由SQL-92给出,且所有的
主要数据库都支持它。它接受用于指定字符串最大长度的参数,例如VARCHAR(12)即定
义了一个最大长度为12个字符的字符串。所有主要数据库都至少支持长度达254个字符
的VARCHAR。当把字符串的值赋给VARCHAR变量时,数据库就记住该字符串的长度,
使用SELECT时,它可以返回准确的原始字符串。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1713794704a2319966.html
评论列表(0条)