文档章节

varchar2改为clob带来的问题

无知有趣
 无知有趣
发布于 2014/09/03 11:36
字数 379
阅读 1441
收藏 0

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'),如果量比较大处理起来就比较费力,考虑以下处理方法:

1、在库中增加varchar2(4000)列,作为基础数据长度还是可控的;

2、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;
}


© 著作权归作者所有

无知有趣
粉丝 13
博文 120
码字总数 33484
作品 0
北京
后端工程师
私信 提问
ORA-22922: 不存在的 LOB 值

今天开发报表遇到了ORA-22922: 不存在的 LOB 值问题,原因是用了wm_concat函数,转换后是clob类型,导致报表查询时报错。 后来改为使用listagg函数替代,完美解决问题,同时网上还有一种解决...

zxf261
2017/01/03
0
0
SSH对Clob字段类型的支持

SSH对Clob字段类型的支持 环境: 1、Oracle 9i 9.2.0.8.0 2、jdbc:ojdbc5.jar 3、Spring 2 4、Hibernate 3 系统中有个信息管理模块,其中的信息内容使用了FCKeditor进行编辑,内容可能会很长...

i33
2012/02/15
215
0
调试经验——CLOB转换为VARCHAR2

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hpdlzu80100/article/details/83379877 问题描述: 报表中的某个字段经过聚合(行转列)后,长度超过了Oracl...

预见未来to50
2018/10/25
0
0
存储过程修改CLOB字段

? CREATE OR REPLACE PROCEDURE INSERT_RES_PEOPLE_ADD ( ?r_people_cname????????? varchar2, ?r_people_intro????????? varchar2 ) AS r_intro_clob clob;-- buffer? varchar2(32767); amo......

陈招林
2010/03/24
476
0
oracle 数据类型与java对照

Mysql Oracle Java BIGINT NUMBER(19,0) java.lang.Long BIT RAW byte[] BLOB BLOB RAW byte[] CHAR CHAR java.lang.String DATE DATE java.sql.Date DATETIME DATE java.sql.Timestamp DECI......

小梅菜鸟
2012/04/11
436
0

没有更多内容

加载失败,请刷新页面

加载更多

目标检测中 yolo 的mAP是什么含义?

mAP定义及相关概念 P => precision,即 准确率 R => recall,即 召回率 PR曲线 = >即 以 precision 和 recall 作为 纵、横轴坐标 的二维曲线。一般来说,precision 和 recall 是 鱼与熊掌 的...

小松1
4分钟前
1
0
用jdk1.8的断言来做非空判断

Assert.notNull(user, "没有获得登录用户信息"); 看源码如下: public static void notNull(Object object, String message) { if (object == null) { throw new IllegalArgum......

architect刘源源
8分钟前
2
0
免费节假日api每一时间更新 2020年 部分节假日安排

根据国务院办公厅关于2020年部分节假日安排的通知国办发明电〔2019〕16号.免费节假日api每一时间更新 2020年 部分节假日安排 http://tool.bitefu.net/jiari/ 各省、自治区、直辖市人民政府,...

xiaogg
11分钟前
3
0
2018NOIP各省一等奖分数线

提高组 普及组

SamXIAO
21分钟前
5
0
常见的PPT时间轴怎么制作,这几种方法你要知道

在PPT当中,时间轴是一个非常重要的一个版块,很多PPT会用它来表示公司的发展历程和项目进度。但是对于PPT时间轴的制作很多人做法是一条直线上添几个点,标注出事件就完成了,可是这样也太过...

TeFuiro
26分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部