前言:mybatis 接收 oracle 中 LONG 类型的,报错:无效的列类型: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

注意

当表中有 long 类型的字段存在时,查询多条数据(列表)时能不查这个字段就不查这个字段。因为查了这个字段会影响速度。

情况

oracle 表中有个字段为 LONG 类型,LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。(具体详解可以百度)

由于数据库中的这张表是别的地方提供的,不能修改,只能查询,所以不能修改 oracle 表中这个字段的类型。

所以只能处理当前问题。当前问题如下:java 实体使用 String 类型接ItemE,mybatis sql 中使用 resultMap 形式,sql resultMap 如下

然后查询 sql 报错:

874731c6140e54fffe0ff699967a2d40.png

解决方案

将 sql 中的 LONGVARCHAR 改为 LONGVARBINARY 即可。

Mybatis JdbcType与Oracle、MySql数据类型对应列表

MybatisJdbcTypeOracleMySql

JdbcType

ARRAY

JdbcType

BIGINT

BIGINT

JdbcType

BINARY

JdbcType

BIT

BIT

JdbcType

BLOB

BLOB

BLOB

JdbcType

BOOLEAN

JdbcType

CHAR

CHAR

CHAR

JdbcType

CLOB

CLOB

TEXT

JdbcType

CURSOR

JdbcType

DATE

DATE

DATE

JdbcType

DECIMAL

DECIMAL

DECIMAL

JdbcType

DOUBLE

NUMBER

DOUBLE

JdbcType

FLOAT

FLOAT

FLOAT

JdbcType

INTEGER

INTEGER

INTEGER

JdbcType

LONGVARBINARY

JdbcType

LONGVARCHAR

LONG VARCHAR

JdbcType

NCHAR

NCHAR

JdbcType

NCLOB

NCLOB

JdbcType

NULL

JdbcType

NUMERIC

NUMERIC/NUMBER

NUMERIC/

JdbcType

NVARCHAR

JdbcType

OTHER

JdbcType

REAL

REAL

REAL

JdbcType

SMALLINT

SMALLINT

SMALLINT

JdbcType

STRUCT

JdbcType

TIME

TIME

JdbcType

TIMESTAMP

TIMESTAMP

TIMESTAMP/DATETIME

JdbcType

TINYINT

TINYINT

JdbcType

UNDEFINED

JdbcType

VARBINARY

JdbcType

VARCHAR

VARCHAR

VARCHAR

注意到, MyBatis的JdbcType中部分没有对应到Oracle和Mysql的数据类型中(或许由于自己遗漏),不过不用担心,后续大家碰到再具体分析;同时上述对应关系不一定是一一对应,请大家了解。

大家主要掌握基本的数字、时间、字符串就足以应对日常开发了。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐