varchar2改为clob带来的问题
生活随笔
收集整理的這篇文章主要介紹了
varchar2改为clob带来的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么80%的碼農(nóng)都做不了架構師?>>> ??
jdbc的PreparedStatement.setString(),ResultSet.getString()對clob和string的處理一樣,盡管類型變化了但程序修改相對較少(前端長度驗證)。
作為基礎數(shù)據(jù),需要將開發(fā)庫表數(shù)據(jù)導出通過sql方式在正式環(huán)境進行升級,clob字段無法正常導出sql,如果clob字段小于4000可通過to_char轉(zhuǎn)換導出,字段大于4000時insert語句執(zhí)行將有異常“ORA-01704: string literal too long”。再如果只是存在極個別大于4000,還可以有一個方法,通過先insert前4000,再逐個update(set remark = remark + 'xxx'),如果量比較大處理起來就比較費力,考慮以下處理方法:
1、在庫中增加varchar2(4000)列,作為基礎數(shù)據(jù)長度還是可控的;
2、bean增加set和get方法,set方法進行超長拆分,get方法進行超長拼接;
/**備注*/ private?String?remark; /**擴展備注*/ private?String?remark1;/**拼接備注,無實際數(shù)據(jù)庫字段,無實際bean屬性*/ public?String?getRealRemark()?{return?null?==?remark???null?:?remark?+?(null?==?remark1???""?:?remark1); }/**拆分備注*/ public?void?setRealRemark(String?realRemark)?throws?UnsupportedEncodingException {if?(null?==?realRemark?||?realRemark.getBytes("GBK").length?<=?4000)?{/*未超4千字節(jié),remark1列無用*/this.remark??=?realRemark;this.remark1?=?null;}?else?if(realRemark.getBytes("GBK").length?<=?7997){/*超過4千字節(jié),remark列存不超4千字節(jié)的最多字符*/int?len?=?2000;while?(true)?{if?(realRemark.substring(0,?++len).getBytes("GBK").length?>?4000)?{//TODO:優(yōu)化break;}}this.remark??=?realRemark.substring(0,?len?-?1);this.remark1?=?realRemark.substring(len?-?1);}else{} }public?String?getRemark()?{return?remark; } public?void?setRemark(String?remark)?{this.remark?=?remark; } public?String?getRemark1()?{return?remark1; } public?void?setRemark1(String?remark1)?{this.remark1?=?remark1; }轉(zhuǎn)載于:https://my.oschina.net/h2do/blog/309498
總結(jié)
以上是生活随笔為你收集整理的varchar2改为clob带来的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HBase图文详解
- 下一篇: 转发高人文章:以前写的一些有关代码签名/