mybatis查詢oracle long類型的踩坑記錄
mybatis查詢oracle long類型的坑
問題描述
最近在開發(fā)中,遇到查詢oracle long類型異常的問題,需求是查詢一個字段中含有函數(shù)的索引的內(nèi)容,然后通過mybatis獲取返回的內(nèi)容封裝成對象,其中l(wèi)ong類型在對象中用String接收,COLUMN_EXPRESSION字段為long類型,供后續(xù)業(yè)務(wù)使用,自定義查詢語句如下
select a.COLUMN_EXPRESSION, a.COLUMN_POSITION from USER_IND_EXPRESSIONS a inner join USER_IND_COLUMNS b on b.INDEX_NAME = a.INDEX_NAME and b.TABLE_NAME = a.TABLE_NAME and b.COLUMN_POSITION = a.COLUMN_POSITION where b.COLUMN_NAME like 'SYS_NC%$'
報錯:Cause: java.sql.SQLException: 流已被關(guān)閉 ; uncategorized SQLException for SQL []; SQL state [99999]; error code [17027]; 流已被關(guān)閉
解決辦法
如果可以修改字段類型情況下,建議改成BLOB,CLOB,NLOB,非常不建議使用LONG;
在無法修改字段類型情況下,一定要將LONG類型字段放在查詢字段的最后(COLUMN_EXPRESSION放在最后),例如
select a.COLUMN_POSITION, a.COLUMN_EXPRESSION from USER_IND_EXPRESSIONS a inner join USER_IND_COLUMNS b on b.INDEX_NAME = a.INDEX_NAME and b.TABLE_NAME = a.TABLE_NAME and b.COLUMN_POSITION = a.COLUMN_POSITION where b.COLUMN_NAME like 'SYS_NC%$'
收獲:
Oracle中如果是數(shù)值,用NUMBER替換LONG,如果是大對象可以用BLOB,CLOB,NLOB替換LONG;其實(shí)查詢時還可以通過存儲過程將LONG轉(zhuǎn)成VARCHAR2返回,個人不建議使用存儲過程。
mybatis處理Oracle中的LONG字段
當(dāng)使用mybatis查詢oracle中帶有LONG數(shù)據(jù)類型的時候,實(shí)體類使用的是String類型來接收.
一般會報兩種錯誤:
- 1.無效字段類型
- 2.流已被關(guān)閉
處理方法
第一種方式:不使用LONG類型(廢話)
第二種方式:自定義函數(shù)將LONG類型轉(zhuǎn)換為VARCHAR類型(百度,方法一大堆,都是)
第三種方式:首先在Mapper.xml文件中自定義resultMap映射關(guān)系,將LONG類型字段的jdbcType設(shè)置為LONGVARBINARY
<resultMap id="BaseResultMap" type="com.libstar.tc.dto.Biblios" > ? ? <result column="name" property="bookrecno" jdbcType="VARCHAR" /> ? ? <result column="content" property="content" jdbcType="LONGVARBINARY" /> </resultMap>
然后自定義SQL查詢數(shù)據(jù),在寫SQL的時候要注意了,將LONG類型的那個字段寫在最后,像這樣
SELECT ID,NAME,CONTENT FROM XXX;其中CONTENT字段為LONG類型字段.
即可成功~
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Mybatis開發(fā)環(huán)境搭建實(shí)現(xiàn)數(shù)據(jù)的增刪改查功能
這篇文章主要介紹了 Mybatis開發(fā)環(huán)境搭建實(shí)現(xiàn)數(shù)據(jù)的增刪改查功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2017-03-03
啟動 Eclipse 彈出 Failed to load the JNI shared library jvm.dll
這篇文章主要介紹了有時候,新電腦上回碰到打開Eclipse時,彈出提示“Failed to load the JNI shared library jvm.dll”錯誤,這里給大家分享解決方案2016-08-08
Java實(shí)現(xiàn)修改PDF文件MD5值且保持內(nèi)容不變
在某些場景中,我們可能需要改變PDF文件的MD5值,而又不希望改變文件的可視內(nèi)容,本文詳細(xì)介紹了如何實(shí)現(xiàn)這一目標(biāo),并提供了具體的Java實(shí)現(xiàn)示例,需要的可以參考下2023-10-10
關(guān)于@Component注解下的類無法@Autowired問題
這篇文章主要介紹了關(guān)于@Component注解下的類無法@Autowired問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03
使用Java如何對復(fù)雜的數(shù)據(jù)類型排序和比大小
我相信大家在第一次接觸算法的時候,最先接觸的肯定也是從排序算法開始的,下面這篇文章主要給大家介紹了關(guān)于使用Java如何對復(fù)雜的數(shù)據(jù)類型排序和比大小的相關(guān)資料,需要的朋友可以參考下2023-12-12

