`

Oracle中 CLOB, BLOB和NLOB

阅读更多

 

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 对象。接口 ResultSetCallableStatementPreparedStatement 中的方法(如 getClobsetClob)允许编程人员访问 SQL CLOB 值。此外,此接口还拥有更新 CLOB 值的方法。

 

 

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

Java代码 复制代码
  1. /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */  
  2. // 通过序列器生成帮助ID    
  3. Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");    
  4. hid = String.valueOf(map.get("HID"));    
  5. //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段    
  6. sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob())  ";    
  7. try  
  8. {              
  9.      //执行插入    
  10.      rtn = DbUtils.executeUpdate(sql,hid);        
  11.      /* 插入成功后,修改HCONTENT字段内容 */  
  12.      //取得数据库连接                             
  13.      Connection conn = DbUtils.getConnection();    
  14.      //手动提交    
  15.      conn.setAutoCommit(false);    
  16.      //定义ResultSet 和 Clob 变量    
  17.      ResultSet rs = null;    
  18.      oracle.sql.CLOB clob = null;    
  19.      //更新SQL    
  20.      String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  21.      java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  22.      //hid是varchar2类型的,所以用setString    
  23.      pstmt.setString(1,hid);    
  24.      //执行update语句    
  25.      rs= pstmt.executeQuery();    
  26.      if(rs.next())    
  27.      {    
  28.         //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()    
  29.         clob = (oracle.sql.CLOB)rs.getClob(1);    
  30.      }    
  31.      //需要用clob.getCharacterOutputStream()流方式输出    
  32.      Writer write = clob.getCharacterOutputStream();    
  33.      //写入具体内容,helpform.getHContent() 存的是帮助的内容    
  34.      write.write(helpform.getHContent());    
  35.      write.flush();    
  36.      write.close();    
  37.      rs.close();    
  38.      //提交    
  39.      conn.commit();    
  40.      conn.close();    
  41. }    
  42. catch(Exception ex)    
  43. {    
  44.     //.........    
  45. }  
/* 以下表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代码 复制代码
  1. /* 修改跟插入时基本一致,也是用for update来实现 */  
  2. //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在    
  3. //所以在修改内容前,需要将PF_HELP_CONTENT内容置空    
  4. sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";    
  5. try  
  6. {          
  7.  rtn = DbUtils.executeUpdate(sql,hid);    
  8.  //以下操作跟添加时一样                                   
  9.  Connection conn = DbUtils.getConnection();    
  10.  conn.setAutoCommit(false);    
  11.  ResultSet rs = null;    
  12.  oracle.sql.CLOB clob = null;    
  13.  String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";    
  14.  java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  15.  pstmt.setString(1,hid);    
  16.  rs= pstmt.executeQuery();    
  17.  if(rs.next())    
  18.  {    
  19.     clob = (oracle.sql.CLOB)rs.getClob(1);    
  20.  }    
  21.  Writer write = clob.getCharacterOutputStream();    
  22.  write.write(helpform.getHContent());    
  23.  write.flush();    
  24.  write.close();    
  25.  rs.close();    
  26.  conn.commit();    
  27.  conn.close();                                    
  28. }    
  29. catch(Exception ex)    
  30. {    
  31.   //...    
  32. }  
/* 修改跟插入时基本一致,也是用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代码 复制代码
  1. /* 前面部分都一致 */  
  2. Connection conn = DbUtils.getConnection();    
  3. conn.setAutoCommit(false);    
  4. ResultSet rs = null;    
  5. oracle.sql.CLOB clob = null;    
  6. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? ";    
  7. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);    
  8. pstmt.setString(1,hid);    
  9. rs= pstmt.executeQuery();    
  10. if(rs.next())    
  11. {    
  12.     //rs.getClob(1)中参数1指的是HCONTENT字段索引,第一个字段从1开始而不是从0。    
  13.     //也可以用字段名来取rs.getClob("HCONTENT")    
  14.     clob = (oracle.sql.CLOB)rs.getClob(1);    
  15. }    
  16. if(clob==null || clob.length()==0)    
  17. {    
  18.     hcontent = "";    
  19. }else  
  20. {    
  21.     //取CLOB字段内容为字符串    
  22.     hcontent=clob.getSubString((long)1,(int)clob.length());    
  23. }    
  24. rs.close();    
  25. conn.close();    
  26. request.setAttribute("HCONTENT",hcontent); 
分享到:
评论

相关推荐

    Oracle导出Clob,Blob工具

    在描述中提到的“Oracle导出Clob,Blob等大字段工具”就是为了解决这个问题而设计的,它是一个自编写的实用程序,方便用户导出和管理Oracle数据库中的大对象数据。 Oracle数据库中的Clob类型用于存储大量的文本数据...

    Oracle导出Clob,Blob工具版本2

    在Oracle中,对这类数据的操作通常需要特定的策略和工具,因为它们的大小和性质不同于常规的行内数据。 这个工具的关键特性可能包括以下几点: 1. **高性能导出**:新版本优化了导出过程,减少了处理大型CLOB和...

    oracle中的Blob和Clob区别

    ### Oracle中的BLOB和CLOB的区别 在Oracle数据库中,`BLOB`(Binary Large Object)和`CLOB`(Character Large Object)是用于存储大量数据的两种特殊数据类型。这两种类型都属于`LOB`(Large Object)类别,主要...

    mysql和Oracle在对clob和blob字段的处理

    - 存储机制:MySQL的`TEXT`和`BINARY`系列数据类型通常存储在数据页中,而Oracle的`CLOB`和`BLOB`可以存储在表空间中,允许更大的数据量。 - 索引支持:Oracle支持对`CLOB`和`BLOB`字段建立索引,而MySQL的索引...

    sql server中的image类型的数据导出到oracle的clob字段中

    我们使用了 Java 语言和 JDBC 驱动程序来实现数据的导出,并将 Image 类型数据写到文件中,然后将文件中的数据读取出来,并将其设置到 Oracle 的 CLOB 字段中。这种方法可以帮助我们实现不同数据库管理系统之间的...

    CLOB、BLOB___CLOB与BLOB的区别

    CLOB 和 BLOB 的主要区别是:CLOB 使用 CHAR 来保存数据,而 BLOB 使用二进制保存数据。CLOB 主要用于存储字符数据,而 BLOB 主要用于存储二进制数据。 在 MySQL 中,BLOB 是个类型系列,包括:TinyBlob、Blob、...

    图片存入Oracle中,用clob和blob两种方式

    在数据库管理中,存储非结构化数据...综上所述,`CLOB`和`BLOB`都是在Oracle中存储图片的有效方法,具体选择哪种方式取决于应用场景和需求。`ClobAndBlob`工具提供了一种便捷的方式来体验和比较这两种方式的使用效果。

    ORACLE中CLOB字段转String类型

    本文将详细介绍如何在Oracle中实现CLOB字段到字符串类型的转换,并探讨其中的关键技术和注意事项。 #### 一、CLOB概述 1. **定义**: - `CLOB`是Oracle数据库提供的一种特殊的数据类型,用于存储大文本数据。 - ...

    oracle(blob转换为clob)

    在Oracle数据库环境中,数据类型BLOB(Binary Large Object)用于存储大量的二进制数据,如图像、音频或视频文件,而CLOB(Character Large Object)则用于存储大量文本数据。在某些情况下,可能需要将BLOB类型的...

    oracle中的BLOB(照片)转换到mysql中

    BLOB是一种可以存储大量二进制数据的对象,分为四种子类型:BLOB、CLOB、NCLOB和BFILE。在Oracle中,BLOB用于存储二进制数据,如照片;而在MySQL中,BLOB也有类似的分类,包括TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB...

    Oracle clob和blob在jdbc的应用

    在Java编程中,Oracle数据库提供了对大型对象(Large Object)的支持,包括CLOB(Character Large Object)和BLOB(Binary Large Object)。这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如...

    修改clob blob 字段

    修改clob blob 字段 修改clob blob 字段 修改clob blob 字段

    oracle Blob Clob 大数处理 代码

    在Oracle中,Blob和Clob的处理涉及到许多关键知识点,包括创建、读取、更新和删除大对象数据。以下是一些相关的详细说明: 1. **创建LOB字段**: 在创建表时,可以添加Blob或Clob字段来存储大对象。例如: ```sql...

    BLOB和CLOB的区别以及在ORALCE中的插入和查询操作

    了解BLOB和CLOB的区别以及如何在Oracle中进行插入和查询操作对于数据库开发者和管理员来说至关重要。 首先,我们来看BLOB和CLOB的主要区别: 1. 数据类型:BLOB用于存储二进制大对象,如图片、视频、音频文件或者...

    Mybatis 处理 CLOB、BLOB 类型数据

    Mybatis 处理 CLOB、BLOB 类型数据 MyBatis 处理 CLOB、BLOB 类型数据是指在使用 MyBatis ...通过使用 MyBatis 处理 CLOB 和 BLOB 类型数据,可以方便地存储和读取大字段类型的数据,提高应用程序的性能和可扩展性。

    oracle Blob转换Clob

    ### Oracle Blob转换Clob ...通过以上内容的学习,可以了解到如何在Oracle数据库中实现Blob到Clob的转换过程,以及相关的注意事项和技术细节。这对于处理大数据量下的不同类型数据转换具有重要意义。

    Oracle,Clob,Blob数据存取的Java代码

    以下是对Oracle中Clob和Blob数据存取的Java代码示例及详细解释。 首先,确保你的项目已经引入了Oracle JDBC驱动(如ojdbc.jar)。然后,你需要创建一个与Oracle数据库的连接,这通常通过`DriverManager.get...

    oracle中使用jdbc读写clob和blob字段

    Oracle 中使用 JDBC 读写 CLOB 和 BLOB 字段 在 Oracle 中,使用 JDBC 读写 CLOB(Character Large OBject)和 BLOB(Binary Large OBject)字段是非常重要的。CLOB 和 BLOB 是 Oracle 中的 LOB(Large OBject)...

    读取oracle数据库中clob字段的值

    ### 读取Oracle数据库中CLOB字段的值 在处理Oracle数据库时,经常会遇到需要读取CLOB(Character Large Object)类型字段的情况。CLOB主要用于存储大量的文本数据,如文章、文档等内容。由于CLOB类型的数据量可能...

    jdbc读写Oracle的CLOB字段

    JDBC读写Oracle的CLOB字段

Global site tag (gtag.js) - Google Analytics