当前位置: 首页 > news >正文

jdbcType-java 类型

在 JDBC 中,jdbcType 用于指定数据库字段的数据类型,确保 Java 类型与数据库类型正确映射。MyBatis 等持久层框架常使用 jdbcType 处理参数和结果集的类型转换。以下是常见的 jdbcType 类型及其说明:

JDBC 类型对应 Java 类型说明常见数据库映射示例
ARRAY java.sql.Array 数据库数组类型 PostgreSQL 的 ARRAY
BIGINT Long 长整数类型(8 字节) MySQL 的 BIGINT、Oracle 的 NUMBER(19)
BINARY byte[] 二进制数据(定长) MySQL 的 BINARY
BIT Boolean 位类型(1 位) MySQL 的 BIT
BLOB byte[]Blob 二进制大对象(存储大量二进制数据) MySQL 的 BLOB、Oracle 的 BLOB
BOOLEAN Boolean 布尔类型 PostgreSQL 的 BOOLEAN
CHAR String 字符类型(定长) MySQL 的 CHAR
CLOB StringClob 字符大对象(存储大量文本) MySQL 的 TEXT、Oracle 的 CLOB
DATE java.sql.Date 日期类型(仅包含年月日) MySQL 的 DATE
DECIMAL BigDecimal 精确小数类型(可指定精度) MySQL 的 DECIMAL、Oracle 的 NUMBER(p,s)
DOUBLE Double 双精度浮点数(8 字节) MySQL 的 DOUBLE
FLOAT Float 单精度浮点数(4 字节) MySQL 的 FLOAT
INTEGER Integer 整数类型(4 字节) MySQL 的 INT、Oracle 的 NUMBER(10)
JAVA_OBJECT 任意 Java 对象 自定义 Java 对象类型 数据库自定义类型映射
LONGNVARCHAR String 长 Unicode 字符串(不定长) Oracle 的 NVARCHAR2(大长度)
LONGVARCHAR String 长字符串(不定长) MySQL 的 LONGTEXT
NCHAR String Unicode 字符类型(定长) Oracle 的 NCHAR
NCLOB StringNClob Unicode 字符大对象 Oracle 的 NCLOB
NVARCHAR String Unicode 字符串(不定长) Oracle 的 NVARCHAR2
NULL 空类型 表示字段值为 NULL
NUMERIC BigDecimal 精确数字类型(与 DECIMAL 类似) 多数数据库的 NUMERIC
OTHER 任意类型 未被标准定义的数据库特有类型 如 MySQL 的 ENUMSET
REAL Float 单精度浮点数(数据库特定精度) Oracle 的 REAL
REF java.sql.Ref 数据库引用类型(指向其他行的指针) Oracle 的 REF 类型
ROWID String 数据库行标识(如 Oracle 的物理地址) Oracle 的 ROWID
SMALLINT Short 短整数类型(2 字节) MySQL 的 SMALLINT
SQLXML java.sql.SQLXML XML 数据类型 支持 XML 的数据库(如 SQL Server)
STRUCT java.sql.Struct 数据库结构类型(复合类型) Oracle 的 OBJECT 类型
TIME java.sql.Time 时间类型(仅包含时分秒) MySQL 的 TIME
TIMESTAMP java.sql.Timestamp 时间戳类型(包含年月日时分秒毫秒) MySQL 的 DATETIMETIMESTAMP
TINYINT Byte 微整数类型(1 字节) MySQL 的 TINYINT
VARBINARY byte[] 二进制数据(不定长) MySQL 的 VARBINARY
VARCHAR String 字符串类型(不定长) MySQL 的 VARCHAR

注意事项:

  1. 数据库兼容性:不同数据库对类型的支持可能有差异(如 BOOLEAN 在 MySQL 中常用 TINYINT 模拟)。
  2. MyBatis 中使用:在 XML 映射文件中指定参数类型时需用 jdbcType,例如:
    xml
     
     
    <insert id="insertUser">INSERT INTO user(name, age) VALUES(#{name, jdbcType=VARCHAR},#{age, jdbcType=INTEGER})
    </insert>
    
     
  3. 避免类型不匹配:若 Java 类型与数据库类型差异较大(如用 String 接收 BIGINT),需显式指定 jdbcType 确保转换正确。

正确使用 jdbcType 可减少类型转换错误,尤其在处理 NULL 值或数据库特有类型时更为重要。
jdbcType 类型 java 类型
以下是 JDBC 类型(jdbcType)与对应的 Java 类型的详细映射关系,这在 MyBatis 等持久层框架中处理参数绑定和结果集映射时非常重要:

JDBC 类型(jdbcType)对应的 Java 类型说明与使用场景
ARRAY java.sql.Array 用于数据库数组类型(如 PostgreSQL 的 ARRAY),较少直接使用
BIGINT Long 8 字节长整数,对应数据库的 BIGINT 类型
BINARY byte[] 定长二进制数据,如数据库的 BINARY 类型
BIT Booleanbyte[] 位类型,长度为 1 时映射 Boolean,长度 > 1 时映射 byte[]
BLOB byte[]java.sql.Blob 二进制大对象,存储图片、文件等二进制数据
BOOLEAN Boolean 布尔类型(true/false),部分数据库用 TINYINT(1) 模拟
CHAR String 定长字符串,对应数据库 CHAR 类型
CLOB Stringjava.sql.Clob 字符大对象,存储长文本(如文章内容)
DATE java.sql.Date 仅包含年月日的日期类型(注意:与 java.util.Date 不同)
DECIMAL java.math.BigDecimal 高精度小数(可指定精度和小数位),适合金额等精确计算场景
DOUBLE Double 8 字节双精度浮点数
FLOAT Float 4 字节单精度浮点数
INTEGER Integer 4 字节整数,对应数据库 INT 类型
JAVA_OBJECT 任意自定义 Java 对象 用于数据库自定义类型与 Java 对象的映射
LONGNVARCHAR String 长 Unicode 字符串(不定长)
LONGVARCHAR String 长字符串(不定长),如数据库 LONGTEXT 类型
NCHAR String 定长 Unicode 字符串,支持多语言
NCLOB Stringjava.sql.NClob Unicode 字符大对象,支持多语言长文本
NVARCHAR String 不定长 Unicode 字符串,如 Oracle 的 NVARCHAR2
NULL 无(通常用 null 表示) 表示字段值为 NULL
NUMERIC java.math.BigDecimal 与 DECIMAL 类似,高精度数字类型
OTHER 任意类型 数据库特有类型(如 MySQL 的 ENUMSET
REAL Float 数据库特定精度的单精度浮点数
SMALLINT Short 2 字节短整数,对应数据库 SMALLINT 类型
SQLXML java.sql.SQLXML 存储 XML 数据的类型
TIME java.sql.Time 仅包含时分秒的时间类型
TIMESTAMP java.sql.Timestamp 包含年月日时分秒毫秒的时间戳类型,对应数据库 DATETIMETIMESTAMP 等
TINYINT Byte 1 字节微整数,如 MySQL 的 TINYINT(常用来表示状态值)
VARBINARY byte[] 不定长二进制数据,如数据库 VARBINARY 类型
VARCHAR String 不定长字符串,最常用的字符串类型(如数据库 VARCHAR

注意事项:

  1. 时间类型区分:
    • java.sql.Date 仅含日期(年月日)
    • java.sql.Time 仅含时间(时分秒)
    • java.sql.Timestamp 含完整时间戳(年月日时分秒毫秒)
    • 实际开发中常转换为 java.time.LocalDateLocalTimeLocalDateTime(Java 8+ 推荐)
  2. MyBatis 中的使用:
    当 Java 类型与数据库类型可能存在歧义时,需显式指定 jdbcType
    xml
     
     
    <select id="getUser" resultType="User">SELECT * FROM user WHERE name = #{name, jdbcType=VARCHAR} AND balance = #{balance, jdbcType=DECIMAL}
    </select>
  3. null 值处理:
    对于可能为 null 的参数,建议指定 jdbcType 避免类型推断错误:
    xml
     
     
    #{param, jdbcType=INTEGER}  <!-- 当 param 为 null 时,明确类型为 INTEGER -->
    
     

正确理解 JDBC 类型与 Java 类型的映射关系,能有效避免类型转换错误,尤其在处理复杂数据类型(如大对象、时间类型)时更为重要。
http://www.wxhsa.cn/company.asp?id=5409

相关文章:

  • 支配对
  • macOS Sonoma 14.8 (23J21) 正式版 ISO、IPSW、PKG 下载
  • DamiBus v1.1.0 发布(给单体多模块解耦)
  • 最小环 Floyd 算法 无向图的最小环问题
  • macOS Sequoia 15.7 (24G222) Boot ISO 原版可引导镜像下载
  • Nginx 安装过程
  • Xcode 26 (17A324) 正式版发布 - Apple 平台 IDE
  • macOS Tahoe 26 (25A354) Boot ISO 原版可引导镜像下载
  • mysql数据库服务主从复制实现(基于position)
  • 海量接入、毫秒响应:易易互联携手阿里云构筑高可用物联网消息中枢
  • macOS Sequoia 15.7 (24G222) 正式版 ISO、IPSW、PKG 下载
  • C++ std::list
  • 函数是编程范式的原理是什么?
  • 能耐高温400度密封圈用什么材质
  • 【IEEE出版|Fellow云集】第五届电气工程与机电一体化技术国际学术会议(ICEEMT 2025)
  • APDU笔记
  • AR眼镜:远程协作的“破局者”,让困难解决“云手帮”
  • 跨网文件摆渡系统功能全解析
  • 跨平台代码同步新时代:Gitee携手GitHub打造开发者高效协作生态
  • CTFer
  • 家政小程序源码一站式开发:助力家政企业数字化转型
  • Gitee推出跨平台镜像功能:一键同步GitHub仓库,开发者协作效率提升50%
  • DeClotH: Decomposable 3D Cloth and Human Body Reconstruction from a Single Image
  • 在 Streamable HTTP 传输模式下启动并测试 MCP Serverr (二)
  • 从0到1上手阿里云ARMS:让Java服务监控变得简单
  • 聚焦实用:内外网文件摆渡系统品牌推荐来了!
  • 生物活性肽:从基础研究到治疗应用的潜力与挑战,及计算机辅助筛选的关键作用
  • MySQL视图定义者和安全性definer/invoker的区别
  • 软件测试day2
  • 软件测式学习