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类来获取关于数据库中列和数据类型的详细信息。