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


前言: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"/>

 

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

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

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM