Clob字段 Union 带来的问题:ORA-00932:数据类型不一致:应为-,但却获得CLOB

问题描述:
   在Mybatis 操作CLOB 的时候遇到了错误,ORA-00932:数据类型不一致:应为-,但却获得CLOB 

或者是利用union 查询返回数据缓冲区太小等问题

问题定位:
1. 看看操作clob 字段的时候用到了Union 了吗? 

  原因: clob 字段不支持分类,union 关键字会对字段进行group by , 这个隐藏从错误很难发现,

             注意: 用union all 可以,但是不能用 uion; 

2:用to_char(clob 字段) 可以解决问题,但是不是长久之计; 

        我一开始的时候用到就是to_char(); 总以为自己sql 没有问题; 而且to_char() 也不会暴露这个问题的;

3:查询clob字段时使用dbms_lob.substr(clob字段) 也可以返回数据 不过有长度限制4000

4:Oracle数据库中有一个字段是CLOB类型,java简单解析不了。去查找了一下解决方案,试了好几种,下面的这种是有效的。

    public String ClobToString(Clob clob) throws SQLException, IOException {

        String reString = "";
        Reader is = clob.getCharacterStream();// 得到流
        BufferedReader br = new BufferedReader(is);
        String s = br.readLine();
        StringBuffer sb = new StringBuffer();
        while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING
        sb.append(s);
        s = br.readLine();
        }
        reString = sb.toString();
        return reString;
        }
}
此处的Clob是java.sql.Clob字段。
但是我们从数据库中取出的时候是CLOB字段。所以我们需要强制转换一下,在调用该方法的时候:

String  competitive = ClobToString((Clob)map.get("COMPETITIVEBRAND"));
 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值