Posted on 2010-01-14 21:48
斷點(diǎn) 閱讀(398)
評(píng)論(0) 編輯 收藏 所屬分類:
Oracle
Caused by: java.sql.BatchUpdateException: ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值
我在系統(tǒng)的一個(gè)頁(yè)面上加載一個(gè).xml文件時(shí),出現(xiàn)了這個(gè)錯(cuò)誤。
原因:
當(dāng)插入數(shù)據(jù)的長(zhǎng)度在1000、2000內(nèi),就會(huì)拋出這樣的錯(cuò)誤。
解決方法:
思路:將存儲(chǔ)的字符串補(bǔ)上空格,讓其超過(guò)2000的長(zhǎng)度即可,但僅限與緊急解決問(wèn)題。
1、首先在.java文件中引入import org.apache.commons.lang.StringUtils;
2、在此.java文件的相應(yīng)的方法里添加如下判斷:
// 處理ora-1461問(wèn)題(clob長(zhǎng)度在1000-2000之間會(huì)出錯(cuò))
if (xml.length() >= 1000 && xml.length() <= 2000) {
xml = StringUtils.rightPad(xml, 2008);
}
相關(guān)知識(shí):
LONG: 可變長(zhǎng)的字符串?dāng)?shù)據(jù),最長(zhǎng)2G,LONG具有VARCHAR2列的特性,可以存儲(chǔ)長(zhǎng)文本一個(gè)表中最多一個(gè)LONG列
LONG RAW: 可變長(zhǎng)二進(jìn)制數(shù)據(jù),最長(zhǎng)2G
CLOB: 字符大對(duì)象Clob 用來(lái)存儲(chǔ)單字節(jié)的字符數(shù)據(jù)
NCLOB: 用來(lái)存儲(chǔ)多字節(jié)的字符數(shù)據(jù)
BLOB: 用于存儲(chǔ)二進(jìn)制數(shù)據(jù)
BFILE: 存儲(chǔ)在文件中的二進(jìn)制數(shù)據(jù),這個(gè)文件中的數(shù)據(jù)只能被只讀訪。但該文件不包含在數(shù)據(jù)庫(kù)內(nèi)。bfile字段實(shí)際的文件存儲(chǔ)在文件系統(tǒng)中,字段中存儲(chǔ)的是文件定位指針.bfile對(duì)oracle來(lái)說(shuō)是只讀的,也不參與事務(wù)性控制和數(shù)據(jù)恢復(fù)。
其中CLOB,NCLOB,BLOB都是內(nèi)部的LOB(Large Object)類型,最長(zhǎng)4G,沒(méi)有LONG只能有一列的限制。要保存圖片、文本文件、Word文件各自最好采用那種數(shù)據(jù)類型呢?BLOB最好,LONG RAW也不錯(cuò),但Long是oracle將要廢棄的類型,因此建議用BLOB。
相關(guān)鏈接:http://www.tkk7.com/allen-zhe/archive/2008/05/06/198627.html
posted @ 2009-04-18 13:01 斷點(diǎn) 閱讀(676) | 評(píng)論 (0)