工作經驗:mybatis 處理 oracle Long 類型
阿新 • • 發佈:2018-07-05
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數據類型對應列表
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 |
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 類型