数据库字段类型和java的对应关系


由于 SQL 数据类型和 Java 数据类型是不同的,因此需要某种机制在使用 Java 类型的应用程序和使用 SQL 类型的数据库之间来读写数据。

为此,JDBC 提供了 getXXX 和 setXXX 方法集、方法 registerOutParameter 和类 Types

JDBC 定义了一个从 JDBC 数据库类型到 Java 类型的标准映射。例如,JDBC 的 INTEGER 类型通常映射为 Java 的 int 类型。这可支持简单的接口,将 JDBC 值读写为简单的 Java 类型。

Java 类型不必与 JDBC 类型完全形同;它们只须能够用足够的类型信息来代表 JDBC 类型,从而能正确地存储和取出参数和从 SQL 语句恢复结果就可以了。例如,Java String 对象可能并不能精确地与任何 JDBC CHAR 类型匹配,但它却可给出足够的类型信息来成功地表示 CHAR、 VARCHAR 或 LONGVARCHAR 类型。

CHAR、 VARCHAR 和 LONGVARCHAR

JDBC 类型 CHAR 表示固定长度的小字符串,VARCHAR 表示长度可变的小字符串,而 LONGVARCHAR 表示长度可变的大字符串。

与 JDBC CHAR 对应的是 SQL CHAR 类型,所有主要的数据库都支持它。支持长度达 254 个字符例如 CHAR(12) 即定义了一个长度为 12 个字符的字符串。

与 JDBC VARCHAR 对应的是 SQL VARCHAR 类型,所有的主要数据库都支持它。支持长度达 254 个字符,当把字符串的值赋给 VARCHAR 变量时,数据库就记住该字符串的长度,使用 SELECT 时,它可以返回准确的原始字符串。

不幸的是,对于 JDBC LONGVARCHAR 类型,目前并没有一致的 SQL 映射。

CHARVARCHAR 和 LONGVARCHAR 可映射为 String 或 char[],但 String 更适合于一般用法String 类能使 String 和 char[] 之间的转换更为容易:它有一个用于将 String对象转换为 char[] 的方法,还有一个将 char[] 转换为 String 对象的构造函数。

方法 ResultSet.getString 用于从 CHARVARCHAR 和LONGVARCHAR 域中检索数据。但如果用LONGVARCHAR 储存好几兆字节的字符串时,应将 LONGVARCHAR 值作为 Java 输入流进行检索,之后从流中以任意大小的块来读取数据。使用方法getAsciiStream 和 getUnicodeStream把储存在 LONGVARCHAR 列的数据作为 Ascii 或 Unicode 字符流来传送。

BINARY、VARBINARY 和 LONGVARBINARY

JDBC 类型BINARY 表示固定长度的小二进制值, VARBINARY 表示长度可变化的小二进制值,而 LONGVARBINARY 表示长度可变化的大二进制值。

不幸的是,这些不同 BINARY 类型的使用还未被标准化,因而在各种主要数据库提供的支持有很大的不同。

在 Java 中,BINARYVARBINARY 和 LONGVARBINARY 都可用同一 byte数组来表示。

检索 BINARY 和 VARBINARY 值时,建议使用 ResultSet.getBytes。如果类型为 JDBC LONGVARBINARY 的某列储存的是几兆字节长度的字节数组,则建议用方法getBinaryStream 来检索,为 Java 输入流检索,然后可从该流中以更小的块来读取。

BIT

JDBC 类型 BIT 代表一个位值,可为 0 或 1。目前只有一部份主流数据库支持它。

JDBC BIT 类型的 Java 映射的推荐类型是 Java 布尔型。

TINYINT、SMALLINT

JDBC 类型 TINYINT 代表一个 8 位无符号整数,其值在 0 到 255 之间。 目前只有一部份的数据库支持它。

JDBC 类型SMALLINT 代表一个 16 位的有符号整数,其值在 -32768 和 32767 之间。所有主流数据库所广为支持

JDBC SMALLINT 类型的 Java 映射的推荐类型是16位的 Java short 类型。

INTEGER

JDBC 类型 INTEGER 代表一个 32 位的有符号整数,其值在 - 2147483648 和 2147483647 之间。所有的主流数据库都至少支持 32 位。

INTEGER 类型 Java 映射的推荐类型是 Java int 类型。

BIGINT

JDBC 类型 BIGINT 代表一个 64 位的有符号整数,其值在 -9223372036854775808 和 9223372036854775807 之间。目前还没有任何数据库实现 SQL BIGINT 类型。

BIGINT 类型的 Java 映射的推荐类型是 Java long 类型。

REAL

JDBC 类型 REAL 代表一个有 7 位尾数的“单精度”浮点数。对应的 SQL 类型 REAL,主流数据库都支持。

REAL 类型的 Java 映射的推荐类型为 Java float 类型。

DOUBLE

JDBC 类型 DOUBLE 代表一个有 15 位尾数的“双精度”浮点数。对应的 SQL 类型是 DOUBLE PRECISION,主流数据库都支持。

DOUBLE 类型的 Java 映射的推荐类型为 Java double 类型。

FLOAT

JDBC 类型 FLOAT 基本上与DOUBLE 相同,对应的 SQL 类型 FLOATFLOAT 代表一个有 15 位尾数的“双精度”浮点数。同时提供了 FLOAT 和 DOUBLE,其目的是与以前的 API 实现一致。但这却有可能产生误导。由于 SQL FLOAT 和单精度的 Java float类型间可能产生混淆,因此建议选用 JDBC DOUBLE 类型而不用 FLOAT

FLOAT 类型的 Java 映射的推荐类型为 Java double 类型。

DECIMAL 和 NUMERIC

JDBC 类型 DECIMAL 和 NUMERIC 两者非常相似。它们都表示固定精度的十进制值。

相应的 SQL 类型 DECIMAL 和 NUMERIC,得到广泛支持。这些 SQL 类型都带有精度和比例参数。精度是所支持的十进制数字的总位数,比例是小数点后的数字位数。比例必须永远小于或等于精度。例如,值 "12.345" 有 5 位精度和 3 位比例,而值 ".11" 有 2 位精度和 2 位比例。JDBC 要求所有 DECIMAL 和 NUMERIC 类型都必须支持至少 15 位的精度和比例。

DECIMAL 和 NUMERIC 之间的唯一区别是NUMERIC 类型必须以确切指定的精度来表示,而 DECIMAL 类型允许动态添加额外的精度。因此,创建为类型 NUMERIC(12,4) 的列将总是用 12 位数来表示,而创建为类型 DECIMAL(12,4) 的列则可用更大的位数来表示。

DECIMAL 和 NUMERIC 类型的 Java 映射的推荐类型是 java.math.BigDecimal该 Java 类型也用绝对精度来表示定点数。java.math.BigDecimal 类型提供了一些数学操作,可对BigDecimal 类型与其它的 BigDecimal 类型、整数类型和浮点数类型进行加、减、乘、除的运算。

用于检索 DECIMAL 和 NUMERIC 值的推荐方法是 ResultSet.getBigDecimal。也可用getString 来检索 DECIMAL 或 NUMERIC 结果,也可用 Java 数值型类型。

 DATE、TIME 和 TIMESTAMP

有三种 JDBC 类型与时间有关:

  • JDBC DATE 类型表示一个由年、月、日组成的日期。对应的是 SQL DATE 类型,但只有一部份主流数据库实现它。
  • JDBC TIME 类型表示一个由小时、分钟和秒组成的时间。对应的是 SQL TIME 类型,但只有一部份主流数据库实现它。
  • JDBC 
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL字段类型长度和Java类型有以下对应关系: 1. 字符串类型: - CHAR(n):Java类型为String,长度为n。 - VARCHAR(n):Java类型为String,长度为n。 - TEXT:Java类型为String。 2. 数值类型: - INTJava类型int。 - BIGINTJava类型为long。 - DECIMAL(p, s):Java类型为BigDecimal,其中p示总位数,s示小数位数。 3. 日期和时间类型: - DATE:Java类型java.sql.Date。 - TIME:Java类型java.sql.Time。 - DATETIME:Java类型java.sql.Timestamp。 4. 布尔类型: - BOOL、BOOLEAN:Java类型为boolean。 5. 二进制类型: - BLOB:Java类型为byte[]。 需要注意的是,Java的数据类型和MySQL字段类型并不完全一致,因此在进行数据类型转换时需要注意类型匹配。在使用JDBC连接MySQL进行数据操作时,可以根据需要使用ResultSet的get方法和PreparedStatement的set方法来进行数据类型的转换。同时,在设计数据库结构时也需要根据实际需求选择合适的MySQL字段类型,以确保数据的存储和查询效率,并防止数据溢出或损失。 ### 回答2: MySQL字段类型长度和Java类型对应如下: 1. 字符串类型VARCHAR、CHAR): - VARCHAR(n) 对应 Java 的 String 类型示一个可变长度的字符串,最大长度为 n,例如:VARCHAR(50) 对应 Java 的 String。 - CHAR(n) 对应 Java 的 String 类型示一个固定长度的字符串,长度为 n,例如:CHAR(20) 对应 Java 的 String。 2. 数值类型INT、BIGINT、FLOAT、DOUBLE、DECIMAL): - INT 对应 Javaint 类型。 - BIGINT 对应 Java 的 long 类型。 - FLOAT 对应 Java 的 float 类型。 - DOUBLE 对应 Java 的 double 类型。 - DECIMAL(precision, scale) 对应 Java 的 BigDecimal 类型,其中 precision 示总长度,scale 示小数点后的位数,例如:DECIMAL(10, 2) 对应 Java 的 BigDecimal。 3. 日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP): - DATE 对应 Java 的 LocalDate 类型。 - TIME 对应 Java 的 LocalTime 类型。 - DATETIME 和 TIMESTAMP 都对应 Java 的 LocalDateTime 类型。 4. 布尔类型(BOOLEAN、BIT): - BOOLEAN 对应 Java 的 boolean 类型。 - BIT(n) 对应 Java 的 byte[] 类型。 5. 其他类型: - BLOB 对应 Java 的 byte[] 类型,用于存储二进制数据。 - TEXT 对应 Java 的 String 类型,用于存储大文本数据。 需要注意的是,MySQL字段类型长度和Java类型对应是一种常见的映射方式,但不是唯一的方式。在不同的数据库和编程语言中,可能会有一些差异或变化。此外,还可以使用数据库连接工具或框架进行字段类型Java类型的自动映射。 ### 回答3: MySQL字段类型的长度和Java类型对应关系如下: 1. 数值类型: - TINYINTJava类型为byte,长度为1字节。 - SMALLINTJava类型为short,长度为2字节。 - MEDIUMINTJava类型int,长度为3字节。 - INTJava类型int,长度为4字节。 - BIGINTJava类型为long,长度为8字节。 - FLOAT:Java类型为float,长度为4字节。 - DOUBLE:Java类型为double,长度为8字节。 - DECIMAL:Java类型为BigDecimal,长度可自定义。 2. 字符串类型: - CHAR:Java类型为String,长度可自定义,最大为255字节。 - VARCHARJava类型为String,长度可自定义,最大为65535字节。 - TEXT:Java类型为String,长度可自定义,最大为65535字节。 - BLOB:Java类型为byte[],长度可自定义,最大为65535字节。 3. 日期和时间类型: - DATE:Java类型java.sql.Date,长度为3字节。 - TIME:Java类型java.sql.Time,长度为3字节。 - DATETIME:Java类型java.sql.Timestamp,长度为8字节。 - TIMESTAMP:Java类型java.sql.Timestamp,长度为4字节。 - YEAR:Java类型java.util.Date,长度为1字节。 4. 其他类型: - BOOLEAN:Java类型为boolean,长度为1字节。 - ENUM:Java类型为String,长度可自定义。 需要注意的是,MySQL字段类型长度可能会受到存储引擎和字符编码的影响,所以实际长度可能有所不同。对于字符串类型,长度指的是字符数,而不是字节数。另外,为了更准确地处理日期和时间类型,建议使用对应Java日期时间类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值