当前位置:  数据库>oracle

在Java + Oracle环境下 对于clob类型的数据的插入

    来源: 互联网  发布时间:2017-04-04

    本文导语: SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB ...

SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据而不是数据本身的逻辑指针。Clob 对象在它被创建的事务处理期间有效。

CLOB 接口提供某些方法来获得 SQL CLOB (Character Large Object) 值长度、在客户端实现 CLOB 值以及搜索子字符串或 CLOB 值中的 CLOB 对象。接口 ResultSet、CallableStatement 和 PreparedStatement 中的方法(如 getClob 和 setClob)允许编程人员访问 SQL CLOB 值。此外,此接口还拥有更新 CLOB 值的方法。

Oracle中,Varchar2支持的最大字节数为4KB,所以对于某些长字符串的处理,我们需要用CLOB类型的字段,CLOB字段最大支持4GB。
还有其他几种类型:
blob:二进制,如果exe,zip
clob:单字节码,比如一般的文本文件.
nlob:多字节码,如UTF格式的文件.
以下就是对CLOG字段的操作方法,在我们的项目中帮助文档部分用到。
1、首先是写入





Java代码
  • /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */  
  • // 通过序列器生成帮助ID    
  • Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");    
  • hid = String.valueOf(map.get("HID"));    
  • //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段    
  • sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob())  ";    
  • try  
  • {              
  •      //执行插入    
  •      rtn = DbUtils.executeUpdate(sql,hid);        
  •      /* 插入成功后,修改HCONTENT字段内容 */  
  •      //取得数据库连接                             
  •      Connection conn = DbUtils.getConnection();    
  •      //手动提交    
  •      conn.setAutoCommit(false);    
  •      //定义ResultSet 和 Clob 变量    
  •      ResultSet rs = null;    
  •      oracle.sql.CLOB clob = null;    
  •      //更新SQL    
  •      String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  •      java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  •      //hid是varchar2类型的,所以用setString    
  •      pstmt.setString(1,hid);    
  •      //执行update语句    
  •      rs= pstmt.executeQuery();    
  •      if(rs.next())    
  •      {    
  •         //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()    
  •         clob = (oracle.sql.CLOB)rs.getClob(1);    
  •      }    
  •      //需要用clob.getCharacterOutputStream()流方式输出    
  •      Writer write = clob.getCharacterOutputStream();    
  •      //写入具体内容,helpform.getHContent() 存的是帮助的内容    
  •      write.write(helpform.getHContent());    
  •      write.flush();    
  •      write.close();    
  •      rs.close();    
  •      //提交    
  •      conn.commit();    
  •      conn.close();    
  • }    
  • catch(Exception ex)    
  • {    
  •     //.........    
  • }  
  • Java代码
  • /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */  
  • // 通过序列器生成帮助ID    
  • Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");    
  • hid = String.valueOf(map.get("HID"));    
  • //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段    
  • sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob())  ";    
  • try  
  • {              
  •      //执行插入    
  •      rtn = DbUtils.executeUpdate(sql,hid);        
  •      /* 插入成功后,修改HCONTENT字段内容 */  
  •      //取得数据库连接                             
  •      Connection conn = DbUtils.getConnection();    
  •      //手动提交    
  •      conn.setAutoCommit(false);    
  •      //定义ResultSet 和 Clob 变量    
  •      ResultSet rs = null;    
  •      oracle.sql.CLOB clob = null;    
  •      //更新SQL    
  •      String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  •      java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  •      //hid是varchar2类型的,所以用setString    
  •      pstmt.setString(1,hid);    
  •      //执行update语句    
  •      rs= pstmt.executeQuery();    
  •      if(rs.next())    
  •      {    
  •         //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()    
  •         clob = (oracle.sql.CLOB)rs.getClob(1);    
  •      }    
  •      //需要用clob.getCharacterOutputStream()流方式输出    
  •      Writer write = clob.getCharacterOutputStream();    
  •      //写入具体内容,helpform.getHContent() 存的是帮助的内容    
  •      write.write(helpform.getHContent());    
  •      write.flush();    
  •      write.close();    
  •      rs.close();    
  •      //提交    
  •      conn.commit();    
  •      conn.close();    
  • }    
  • catch(Exception ex)    
  • {    
  •     //.........    
  • }  
  • /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */
    // 通过序列器生成帮助ID 
    Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL "); 
    hid = String.valueOf(map.get("HID")); 
    //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段 
    sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob())  "; 
    try
    {           
         //执行插入 
         rtn = DbUtils.executeUpdate(sql,hid);     
         /* 插入成功后,修改HCONTENT字段内容 */
         //取得数据库连接                          
         Connection conn = DbUtils.getConnection(); 
         //手动提交 
         conn.setAutoCommit(false); 
         //定义ResultSet 和 Clob 变量 
         ResultSet rs = null; 
         oracle.sql.CLOB clob = null; 
         //更新SQL 
         String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update "; 
         java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob); 
         //hid是varchar2类型的,所以用setString 
         pstmt.setString(1,hid); 
         //执行update语句 
         rs= pstmt.executeQuery(); 
         if(rs.next()) 
         { 
            //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob() 
            clob = (oracle.sql.CLOB)rs.getClob(1); 
         } 
         //需要用clob.getCharacterOutputStream()流方式输出 
         Writer write = clob.getCharacterOutputStream(); 
         //写入具体内容,helpform.getHContent() 存的是帮助的内容 
         write.write(helpform.getHContent()); 
         write.flush(); 
         write.close(); 
         rs.close(); 
         //提交 
         conn.commit(); 
         conn.close(); 
    } 
    catch(Exception ex) 
    { 
        //......... 
    }


    2、修改CLOB字段内容 

    Java代码
  • /* 修改跟插入时基本一致,也是用for update来实现 */  
  • //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在    
  • //所以在修改内容前,需要将PF_HELP_CONTENT内容置空    
  • sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";    
  • try  
  • {          
  •  rtn = DbUtils.executeUpdate(sql,hid);    
  •  //以下操作跟添加时一样                                   
  •  Connection conn = DbUtils.getConnection();    
  •  conn.setAutoCommit(false);    
  •  ResultSet rs = null;    
  •  oracle.sql.CLOB clob = null;    
  •  String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  •  java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  •  pstmt.setString(1,hid);    
  •  rs= pstmt.executeQuery();    
  •  if(rs.next())    
  •  {    
  •     clob = (oracle.sql.CLOB)rs.getClob(1);    
  •  }    
  •  Writer write = clob.getCharacterOutputStream();    
  •  write.write(helpform.getHContent());    
  •  write.flush();    
  •  write.close();    
  •  rs.close();    
  •  conn.commit();    
  •  conn.close();                                    
  • }    
  • catch(Exception ex)    
  • {    
  •   //...    
  • }  
  • Java代码
  • /* 修改跟插入时基本一致,也是用for update来实现 */  
  • //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在    
  • //所以在修改内容前,需要将PF_HELP_CONTENT内容置空    
  • sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";    
  • try  
  • {          
  •  rtn = DbUtils.executeUpdate(sql,hid);    
  •  //以下操作跟添加时一样                                   
  •  Connection conn = DbUtils.getConnection();    
  •  conn.setAutoCommit(false);    
  •  ResultSet rs = null;    
  •  oracle.sql.CLOB clob = null;    
  •  String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  •  java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  •  pstmt.setString(1,hid);    
  •  rs= pstmt.executeQuery();    
  •  if(rs.next())    
  •  {    
  •     clob = (oracle.sql.CLOB)rs.getClob(1);    
  •  }    
  •  Writer write = clob.getCharacterOutputStream();    
  •  write.write(helpform.getHContent());    
  •  write.flush();    
  •  write.close();    
  •  rs.close();    
  •  conn.commit();    
  •  conn.close();                                    
  • }    
  • catch(Exception ex)    
  • {    
  •   //...    
  • }  
  • /* 修改跟插入时基本一致,也是用for update来实现 */
    //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在 
    //所以在修改内容前,需要将PF_HELP_CONTENT内容置空 
    sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? "; 
    try
    {       
     rtn = DbUtils.executeUpdate(sql,hid); 
     //以下操作跟添加时一样                                
     Connection conn = DbUtils.getConnection(); 
     conn.setAutoCommit(false); 
     ResultSet rs = null; 
     oracle.sql.CLOB clob = null; 
     String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update "; 
     java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob); 
     pstmt.setString(1,hid); 
     rs= pstmt.executeQuery(); 
     if(rs.next()) 
     { 
        clob = (oracle.sql.CLOB)rs.getClob(1); 
     } 
     Writer write = clob.getCharacterOutputStream(); 
     write.write(helpform.getHContent()); 
     write.flush(); 
     write.close(); 
     rs.close(); 
     conn.commit(); 
     conn.close();                                 
    } 
    catch(Exception ex) 
    { 
      //... 
    }



    3、取出CLOB字段的文本内容

    Java代码
  • /* 前面部分都一致 */  
  • Connection conn = DbUtils.getConnection();    
  • conn.setAutoCommit(false);    
  • ResultSet rs = null;    
  • oracle.sql.CLOB clob = null;    
  • String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? ";    
  • java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  • pstmt.setString(1,hid);    
  • rs= pstmt.executeQuery();    
  • if(rs.next())    
  • {    
  •     //rs.getClob(1)中参数1指的是HCONTENT字段索引,第一个字段从1开始而不是从0。    
  •     //也可以用字段名来取rs.getClob("HCONTENT")    
  •     clob = (oracle.sql.CLOB)rs.getClob(1);    
  • }    
  • if(clob==null || clob.length()==0)    
  • {    
  •     hcontent = "";    
  • }else  
  • {    
  •     //取CLOB字段内容为字符串    
  •     hcontent=clob.getSubString((long)1,(int)clob.length());    
  • }    
  • rs.close();    
  • conn.close();    
  • request.setAttribute("HCONTENT",hcontent); 

  •     
     
     

    您可能感兴趣的文章:

  • java 对树的操作,TreeSet,能否插入相同的数据,如果相同,如何解决
  • 急问题:在java中嵌入sql的插入语句,插入成功,但是出现异常
  • JAVA连数据库并插入数据的问题?
  • java二分查找插入法
  • java插入排序 Insert sort实例
  • 有关java.sql.ResultSet 利用SetDate往 oracle 中插入时间和日期的问题!!
  • Java获取最后插入MySQL记录的自增ID值的3种方法
  • JAVA算法起步之插入排序实例
  • java操作mysql入门代码实例(含插入、更新和查询)
  • java直接插入排序示例
  • java 下执行mysql 批量插入的几种方法及用时
  • java实现插入mysql二进制文件,blob类型,遇到问题及解决办法
  • Java直接插入排序算法实现
  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
  • Java获取网络文件并插入数据库的代码
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: type定义参考
  • java 基本类型或可序列化类型,这里说的可序列化类型是什么意思???具体都有哪些类型??谢谢
  • java命名空间javax.annotation注释类型resource的类成员方法: authenticationtype定义及介绍
  • 如何将java.util.Date类型的日期转换成java.sql.Date类型的日期?
  • java命名空间javax.annotation注释类型resource的类成员方法: type定义及介绍
  • 请问SQL中的datetime类型于java中什么类型对应?
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: value定义参考
  • java中的字符类型如何转换成String类型
  • java命名空间javax.annotation注释类型resource的类成员方法: shareable定义及介绍
  • 请教JAVA小问题:如何将含数字的String类型的对象转化为int或long类型
  • java命名空间javax.jws注释类型webparam的类成员方法: mode定义及介绍
  • ado的rs.field("字段名")可以访问任何类型的数据,那吗java里面这种问题如何处理。是不是要先判断类型然后再根据类型来使用相应的getint or getString阿!谢谢了!在线等待!
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: wsdllocation定义参考
  • 深入理解:Java是类型安全的语言,而C++是非类型安全的语言
  • java命名空间javax.xml.bind.annotation注释类型xmlelementref的类成员方法: type定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如何在linux环境下配置java环境变量?
  • 介绍几本电子书还有,java的开发环境及测试环境在那下载
  • 下载了个Tomcat 5.0.27,solaris 9系统,但是环境Java_home的环境变量不知道怎么设定
  • 请问各位大虾,小弟今天开始学jsp了,这学期我们有java课,所以已经下载了jdk(好象是1.2),请问我的98环境怎么配置jsp环境呀?我的jdk可以运行.java程序,别的我就不知道了....谢谢!
  • 我准备学习Java,如何配置Java环境?拜托各位英雄!!!
  • 我想学java,那java的运行环境是什么?
  • 大哥大姐们小弟刚学JAVA,对它没点头绪啊!能告诉我JAVA在什么环境下编写代码和编译吗??
  • 便携版 Java 系统运行环境 jPortable
  • java程序环境变量的问题!
  • 在Java中如何获得外部的环境变量
  • 请教何种Java环境易学易用!
  • 各位使用过JAVA的朋友们!JAVA好用吗?它有向VC那样的集成开发环境吗?
  • java的开发环境
  • ubuntu上配置Java编程环境
  • 怎样配置java 2 的运行环境
  • linux下安装java环境,无法启动系统了.
  • java的开发环境该怎么样配置啊?
  • 现在哪种java的开发环境比较受欢迎(vj++??jbuilder??),请推荐几本学习java的好书?
  • 如何才能在java(vj环境下)播放声音?
  • 关于JAVA的环境问题?各位高手
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 在Java中如何获得外部的环境变量 iis7站长之家
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3