JDBC支持哪些数据类型?
Java Database Connectivity(JDBC)是Java编程语言中的一种应用程序接口(API),用于在Java的应用程序和各种类型的数据库之间建立连接,并且能够执行SQL查询和更新语句。在JDBC中,支持的数据类型是非常重要的,因此在本文中我们将讨论JDBC支持的数据类型。
阅读更多:MySQL 教程
JDBC支持的基本数据类型
JDBC支持Java的基本数据类型作为传递参数或返回值。以下是JDBC支持的基本数据类型列表:
| 类型 | 描述 |
|---|---|
| BYTE | 8位有符号整数 |
| SHORT | 16位有符号整数 |
| INT | 32位有符号整数 |
| LONG | 64位有符号整数 |
| FLOAT | 32位IEEE浮点数 |
| DOUBLE | 64位IEEE浮点数 |
| BOOLEAN | true/false值 |
| CHAR | 字符,使用Unicode编码,占2个字节 |
| VARCHAR | 可变长度的字符串 |
以下是代码示例:
PreparedStatement ps = conn.prepareStatement("INSERT INTO student(name, age, isMale) VALUES (?, ?, ?)");
ps.setString(1, "张三");
ps.setInt(2, 25);
ps.setBoolean(3, true);
JDBC支持的其他数据类型
除了基本数据类型,JDBC还支持其他数据类型,例如日期、时间、二进制数据和大型对象(LOB)。以下是完整的JDBC数据类型:
| 类型 | 描述 |
|---|---|
| DATE | 年月日。 |
| TIME | 时分秒。 |
| TIMESTAMP | 年月日时分秒。 |
| BINARY | 固定长度的二进制数据。最多占255个字节。 |
| VARBINARY | 可变长度的二进制数据。最多占65535个字节。 |
| LONGVARBINARY | 长度可变的二进制数据。最多占2^31-1个字节。 |
| BLOB | 可变长度的二进制数据,最多占2^31-1个字节。 |
| CLOB | 字符数据,最多占2^31-1个字符。 |
以下是代码示例:
PreparedStatement ps = conn.prepareStatement("INSERT INTO student(name, photo) VALUES (?, ?)");
ps.setString(1, "张三");
File photo = new File("D:\\photo.jpg");
try (InputStream is = new FileInputStream(photo)) {
ps.setBinaryStream(2, is, photo.length());
}
数据类型转换
当JDBC试图将Java数据类型映射到SQL数据类型时,它将尝试自动转换。如果失败,则可能会出现运行时错误。以下是JDBC自动转换规则的一些示例:
| JDBC类型 | Java类型 | SQL类型 |
|---|---|---|
| BIGINT | Long(long) | BIGINT |
| BINARY | byte[] | BINARY |
| BIT | Boolean | BIT |
| CHAR | String | CHAR |
| CLOB | Clob | CLOB |
| DATE | Date | DATE |
| DECIMAL | BigDecimal | DECIMAL |
| DOUBLE | Double(double) | DOUBLE |
| FLOAT | Float(float) | FLOAT |
| INTEGER | Integer(int) | INTEGER |
| LONGVARBINARY | byte[] | BLOB |
| LONGVARCHAR | String | CLOB |
| NCHAR | String | NCHAR |
| NUMERIC | BigDecimal | NUMERIC |
| NVARCHAR | String | NVARCHAR |
| REAL | Float(float) | REAL |
| SMALLINT | Short(short) | SMALLINT |
| TIME | Time | TIME |
| TIMESTAMP | Timestamp | TIMESTAMP |
| TINYINT | Byte | TINYINT |
| VARBINARY | byte[] | VARBINARY |
| VARCHAR | String | VARCHAR |
不同数据库的数据类型
不同的数据库支持不同的数据类型,因此JDBC驱动程序必须能够将JDBC数据类型转换为适当的数据库数据类型。以下是一些流行数据库支持的数据类型:
MySQL支持的数据类型
| 数据类型 | 描述 |
|---|---|
| INT | 整数,最大允许10位数字。 |
| BIGINT | 长整数,最大允许19位数字。 |
| DECIMAL | 十进制数,一般用于存储货币。例如:DECIMAL(5,2) 允许存储 5 位数字,并保留 2 位小数。 |
| FLOAT | 单精度浮点数,数字范围比DECIMAL大。 |
| DOUBLE | 双精度浮点数,比FLOAT有更高的精度。 |
| DATE | 日期,格式为YYYY-MM-DD。 |
| TIME | 时间,格式为HH:MM:SS。 |
| TIMESTAMP | 日期时间,格式为YYYY-MM-DD HH:MM:SS。 |
| YEAR | 年份,格式为YYYY。 |
| CHAR | 字符串,固定长度。例如CHAR(10)将允许存储不多于10个字符的字符串。 |
| VARCHAR | 字符串,可变长度。例如VARCHAR(255)允许存储最多255个字符的字符串。 |
| BINARY | 二进制数据,存储与输入的精确字节数相同的长度。 |
| VARBINARY | 变长二进制数据。与VARCHAR类似,但存储的是二进制字符串。 |
| TINYBLOB | 非常小的BLOB。最多可存储255个字符。 |
| BLOB | 二进制大对象,与VARCHAR类似,但存储的是二进制数据。 |
| MEDIUMBLOB | 大型二进制对象,最多可存储16MB的数据。 |
| LONGBLOB | 极大型二进制文件,最多可存储4GB的数据。 |
| TINYTEXT | 文本数据类型,最多可存储255个字符。 |
| TEXT | 文本数据类型,最多可存储65,535个字符。 |
| MEDIUMTEXT | 文本数据类型,最多可存储16MB的数据。 |
| LONGTEXT | 文本数据类型,最多可存储4GB的数据。 |
Oracle支持的数据类型
| 数据类型 | 描述 |
|---|---|
| CHAR | 字符串,固定长度。最大可存储2,000个字符。 |
| VARCHAR2 | 字符串,变长。最多可存储4,000个字符。 |
| NUMBER | 数字,可存储2^126-1个数字。 |
| BINARY_FLOAT | 4字节浮点数。 |
| BINARY_DOUBLE | 8字节浮点数。 |
| DATE | 日期和时间。 |
| TIMESTAMP | 带有时区的日期和时间。 |
| INTERVAL YEAR TO MONTH | 特定时间间隔,由数量(年份和月份)组成。 |
| INTERVAL DAY TO SECOND | 特定时间间隔,由数量(日、小时、分钟、秒和小数秒)组成。 |
| BLOB | 二进制大型对象。最多可存储4GB的数据。 |
| CLOB | 大型字符对象。最多可存储4GB的数据。 |
| NCLOB | National Character Large Object。 |
SQL Server支持的数据类型
| 数据类型 | 描述 |
|---|---|
| BIT | 0或1。 |
| TINYINT | 非负整数,最大允许值为2^7-1。 |
| SMALLINT | 整数,最大允许值为2^15-1。 |
| INT | 整数,最大允许值为2^31-1。 |
| BIGINT | 长整数,最大允许值为2^63-1。 |
| FLOAT(n) | 浮点数,n表示精度。 |
| REAL | 单精度浮点数。 |
| NUMERIC(p,s) | 高精度十进制数,p表示精度,s表示小数位数。 |
| DECIMAL(p,s) | 高精度十进制数,p表示精度,s表示小数位数。 |
| SMALLDATETIME | 仅支持年份介于1900年和2079年之间的日期和时间。 |
| DATETIME | 支持年份介于1753年和9999年之间的日期和时间。 |
| CHAR(n) | 字符串,固定长度。最大可存储8,000个字符。 |
| VARCHAR(n) | 字符串,可变长度。最多可存储8,000个字符。 |
| DATE | 日期。 |
| TIME | 时间。 |
| DATETIME2 | 高精度日期和时间。 |
| DATETIMEOFFSET | 带有时区偏移的日期和时间。 |
| BINARY(n) | 二进制数据,固定长度。最大可存储8,000个字节。 |
| VARBINARY(n) | 变长二进制数据。最多可存储8,000个字节。 |
| IMAGE | 二进制大型对象。最多可存储2^31-1个字节。 |
| TEXT | 大型字符对象。最多可存储2^31-1个字符。 |
PostgreSQL支持的数据类型
| 数据类型 | 描述 |
|---|---|
| SMALLINT | 16位整数,仅支持-32768到32767范围内的值。 |
| INTEGER | 32位整数,仅支持-2147483648到2147483647范围内的值。 |
| BIGINT | 64位整数, -9223372036854775808 到 9223372036854775807。 |
| NUMERIC(p,s) | 用于高精度计算的十进制数。可容纳p个数字,其中s位小数。 |
| REAL | 4字节精度浮点数。 |
| DOUBLE PRECISION | 8字节精度浮点数。 |
| SMALLSERIAL | 与SMALLINT相同,但自增长。 |
| SERIAL | 与INTEGER相同,但自增长。 |
| BIGSERIAL | 与BIGINT相同,但自增长。 |
| TIMESTAMP | 时间戳。 |
| TIMESTAMPTZ | 与TIMESTAMP相同,但具有时区。 |
| DATE | 日期。 |
| TIME | 时间。 |
| TIMETZ | 与TIME相同,但具有时区。 |
| INTERVAL | 时间段。 |
| CHAR(n) | 字符串,固定长度。最多可存储n个字符。 |
| VARCHAR(n) | 可变长度的字符串。最多可存储n个字符。 |
| TEXT | 长度可变字符串。 |
| BYTEA | 二进制数据。 |
结论
在JDBC中,支持的数据类型是非常重要的。JDBC支持Java的基本数据类型,例如BYTE、SHORT、INT、LONG、FLOAT、DOUBLE、BOOLEAN、CHAR和VARCHAR。除了基本数据类型,JDBC还支持其他数据类型,例如日期、时间、二进制数据和大型对象(LOB)。不同的数据库支持不同的数据类型,JDBC驱动程序必须能够将JDBC数据类型转换为适当的数据库数据类型。在选择数据库和JDBC驱动程序时,了解其支持的数据类型非常重要,以便正确地处理数据并避免错误。同时,您可能需要使用JDBC API中的ResultSetMetaData类和DatabaseMetaData类来获取关于数据库中列和数据类型的详细信息。
极客笔记