关于clob字段的使用 "ORA-22835:缓冲区对于CLOB到CHAR转换而言太小"异常

来源:互联网 发布:spss数据信度分析 编辑:程序博客网 时间:2024/06/05 23:21


版权声明:本文为博主原创文章,未经博主允许不得转载。

在日常开发中,经常遇到存储字段大于4000字节的情况,这时候,就要考虑到clob字段了,而最长见的异常就是 "ORA-22835:缓冲区对于CLOB到CHAR转换而言太小"了,那么该如何解决呢???

创建表

CREATE TABLE clobtest(    id              NUMBER(19) not null,    text_max        CLOB)

插入内容sql
INSERT INTO clobtest(ID,text_clob) VALUES (#{id} ,#{str,jdbcType=CLOB})

查看内容sql

select text_clob from clobtestwhere id=#{0}

mapper层此处省略... ...

测试类

测试插入

                @Testpublic void testInsert(){try {StringBuilder sb = new StringBuilder();for (int i = 0; i <30000; i++) {sb.append(i+",");}String str = sb.toString();                        //插入数据库int a = gbossInvokeMapper.testInsert(str);System.out.println(a);} catch (Exception e) {e.printStackTrace();}}

测试查询

如果用to_char去转换的话,则可能出现"ORA-22835:缓冲区对于CLOB到CHAR转换而言太小"异常

select to_char(text_clob) text_clob from clobtestwhere id=#{0}//不可用

解决方案

@Testpublic void textRead(){try {String reString = "";//读取数据库内容Map<String, Object> map = gbossInvokeMapper.textRead();ClobProxyImpl c = (ClobProxyImpl)map.get("TEXT_MAX");Reader r = c.getCharacterStream();BufferedReader br = new BufferedReader(r);  String s = br.readLine();  StringBuffer sb = new StringBuffer();  while (s != null) {// 执行循环将字符串全部取出付值给StringBuffer由StringBuffer转成STRING    sb.append(s);    s = br.readLine();  }  reString = sb.toString();  if(br!=null){    br.close();  }  if(r!=null){    r.close();  } System.out.println(reString);} catch (Exception e) {e.printStackTrace();}System.out.println("over");}


阅读全文
0 0
原创粉丝点击