在使用原生jdbc做保存大字段clob或者是blob時(shí), 發(fā)生異常:
ERROR [pool-12-thread-1] PartitionConsumerThread.run(128) | java.lang.AbstractMethodError: Method oraclebc/driver/T4CPreparedStatement.setCharacterStream(ILjava/io/Reader;J)V is abstract
分析原因:
創(chuàng)新互聯(lián)建站專注于企業(yè)全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站重做改版、敘永網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為敘永等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
- 異常是說T4CPreparedStatement這個(gè)類調(diào)用的是一個(gè)抽象的方法,意思是它本身沒有對(duì)jdbc的setCharacterStream進(jìn)行實(shí)現(xiàn)。
- 我們框架用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)用的是oracle.sql.class12, 存儲(chǔ)大字段發(fā)生異常之后, 我去看了T4CPreparedStatement的源碼, 他繼承了OraclePreparedStatement, OraclePreparedStatement中有setCharacterStream, setClob, setBlob方法的實(shí)現(xiàn), 但是與jdbc的setCharacterStream,setClob, setBlob方法的參數(shù)類型是不一樣的,可以去看一下源碼就懂了, 意思就是, OraclePreparedStatement或者T4CPreparedStatement都沒有實(shí)現(xiàn)jdbc的setCharacterStream,setClob, setBlob方法, 只是繼承了抽象的方法, 因此我們?cè)谡{(diào)用時(shí)才會(huì)報(bào)前面的異常,
- 解決辦法: 更換oracle驅(qū)動(dòng), 之后我把驅(qū)動(dòng)換為了odjbc6, 同樣去看了源碼, 發(fā)現(xiàn)OraclePreparedStatement有對(duì)jdbc的PrepareStatement處理大字段方法的實(shí)現(xiàn), 完美解決問題;
分享名稱:oracle的class12驅(qū)動(dòng)沒有實(shí)現(xiàn)jdbc對(duì)clob或blob的存儲(chǔ),解決辦法
瀏覽路徑:
http://weahome.cn/article/pipici.html