⼯作经验:mybatis处理oracleLong类型前⾔: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 如下<resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.yule.demo">
<result column="ITEM_E" property="itemE" jdbcType="LONGVARCHAR"/>
</resultMap>
然后查询 sql 报错:
解决⽅案
将 sql 中的 LONGVARCHAR 改为 LONGVARBINARY 即可。
<result column="ITEM_E" property="itemE" jdbcType="LONGVARBINARY"/>
补充(转)
Mybatis JdbcType与Oracle、MySql数据类型对应列表
Mybatis JdbcType Oracle MySql
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
Mybatis JdbcType Oracle MySql
JdbcType INTEGER INTEGER INTEGER
JdbcType LONGVARBINARY
JdbcType LONGVARCHAR LONG VARCHAR
JdbcType NCHAR NCHAR
JdbcType NCLOB NCLOB
JdbcType NULL
oracle decimal类型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的数据类型中(或许由于⾃⼰遗漏),不过不⽤担⼼,后续⼤家碰到再具体分析;同时上述对应关系不⼀定是⼀⼀对应,请⼤家了解。
⼤家主要掌握基本的数字、时间、字符串就⾜以应对⽇常开发了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论