標籤:tis block 技術分享 地方 long 注意 extends mes 資料類型
前言: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 類型