jdbc的PreparedStatement.setString(),ResultSet.getString()對clob和string的處理同樣,儘管類型變化了但程序修改相對較少(前端長度驗證)。前端
做爲基礎數據,須要將開發庫表數據導出經過sql方式在正式環境進行升級,clob字段沒法正常導出sql,若是clob字段小於4000可經過to_char轉換導出,字段大於4000時insert語句執行將有異常「ORA-01704: string literal too long」。再若是隻是存在極個別大於4000,還能夠有一個方法,經過先insert前4000,再逐個update(set remark = remark + 'xxx'),若是量比較大處理起來就比較費力,考慮如下處理方法:java
一、在庫中增長varchar2(4000)列,做爲基礎數據長度仍是可控的;sql
二、bean增長set和get方法,set方法進行超長拆分,get方法進行超長拼接;數據庫
/**備註*/ private String remark; /**擴展備註*/ private String remark1; /**拼接備註,無實際數據庫字段,無實際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千字節,remark1列無用*/ this.remark = realRemark; this.remark1 = null; } else if(realRemark.getBytes("GBK").length <= 7997){ /*超過4千字節,remark列存不超4千字節的最多字符*/ int len = 2000; while (true) { if (realRemark.substring(0, ++len).getBytes("GBK").length > 4000) { //TODO:優化 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; }