数据库处理clob字段方法.docVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据库处理clob字段方法

在知识库的建立的时候,用普通VARCHAR2存放文章是显然不够的,只有区区4000的字节,放不了多少字, 而CLOB数据类型,则能最多存放8G的数据。但是这个字段处理起来有比较多的特殊性,记录一下。 插入: 直接写在SQL里面是不行的,一来SQL脚本有字符数限制,而来文章内容包含许多特殊字符,如换行,引号, 之类的东西,很麻烦。网上流行通用做法是先插入一个空CLOB字段,用empty_clob()方法来创建空字段,如: 代码如下: INSERT INTO T_TOPIC(TOPIC_ID,TOPIC_CONTENT) VALUES(‘0000001,empty_clob()); 然后再用SELECT TOPIC_CONTENT FROM T_TOPIC WHERE TOPIC_ID=0000001FOR UPDATE的查询语句, 来构造一个更新的STATEMENT,在获取到ResultSet之后,对CLOB字段进行更新。 代码如下: ResultSet rs = pstm.executeQuery(); if(rs.next()){ oracle.sql.CLOB lob =(CLOB)rs.getClob(1); try { Writer os = lob.getCharacterOutputStream(); os.write(dr.getField(FLD_CONTENT).asString()); os.flush(); } catch (IOException e) { e.printStackTrace(); } } 这个插入和更新操作要放在事务中,即获取到Connection后要设置setAutoCommit(false); 更新: 更新的时候也是采用SEELCT … FOR UPDATE方式 也要设置事务 读取: 代码如下: CLOB clob = (CLOB)rs.getClob(FLD_CONTENT); Reader reader = clob.getCharacterStream(); StringBuffer sb=new StringBuffer(); char[] cb = new char[1024]; try { for(int len = reader.read(cb);len0;len= reader.read(cb)){ sb.append(cb,0,len); } } catch (IOException e) { throw new SQLException(读取文章内容失败.,e); } 查询的特殊性: 有CLOB字段的数据表,在SQL语句中不能使用DISTINCT关键字进行筛选,即便关键字不用在CLOB字段名前, 实际上DISTINCT关键字都是对于SQL中所有字段有效。而CLOB字段是不能进行如同LIKE类似的匹配的,所以, 不能进行去重复操作。 两种解决办法: 1、在SQL中调用方法转成VARCHAR2字段后,再DISTINCT,这种方式的局限显而易见。 2、改变SQL脚本的书写方式,先查出没有CLOB字段的集合,然后在在外层用EXISTS关键字或IN关键字进行筛选。 代码如下: //String sqlsel2 = select jsonbody from db_ps_listcatalog where + // listtype =sh11 for update; // String col=jsonbody; public boolean updateClob(String sql,String col,String buf){ boolean flag=false; Statement stem=null; Connection conn=null; ResultSet rs=null; Writer wr = null; try{ conn= dp.getConnection(); conn.setAutoCommit(false); stem=conn.createStatement(); rs = stem.executeQuery(sql); if (rs.next()) { CLOB clob = (CLOB) rs.getClob(col); java.lang.reflect.Method methodToInvoke = clob.getClass().getMethod( getCharacterOutputStream, (Class[]) null); wr = (Writer) methodToInvoke.i

文档评论(0)

haihang2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档