1. 程式人生 > >工作經驗:mybatis 處理 oracle Long 類型

工作經驗:mybatis 處理 oracle Long 類型

not fine ble boolean 分析 oracle image res body

前言:mybatis 接收 oracle 中 LONG 類型的,報錯:無效的列類型: getCLOB not implemented for class oracle.jdbc.driver.T4CLongAccessor

情況

  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"/>

補充(轉http://blog.csdn.net/loongshawn/article/details/50496460

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的數據類型中(或許由於自己遺漏),不過不用擔心,後續大家碰到再具體分析;同時上述對應關系不一定是一一對應,請大家了解。

大家主要掌握基本的數字、時間、字符串就足以應對日常開發了。

  

工作經驗:mybatis 處理 oracle Long 類型