`
rbible
  • 浏览: 54244 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

J2EE操作Oracle的clob类型字段

阅读更多
Oracle中,Varchar2支持的最大字节数为4KB,所以对于某些长字符串的处理,我们需要用CLOB类型的字段,CLOB字段最大支持4GB。
还有其他几种类型:
blob:二进制,如果exe,zip
clob:单字节码,比如一般的文本文件.
nlob:多字节码,如UTF格式的文件.
以下就是对CLOG字段的操作方法,在我们的项目中帮助文档部分用到。
1、首先是写入
/* 以下表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字段内容 
/* 修改跟插入时基本一致,也是用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字段的文本内容
/* 前面部分都一致 */
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);
分享到:
评论

相关推荐

    spring+hibernate操作oracle的clob字段

    在J2EE开发中,处理大数据对象(如大文本或二进制数据)时,Oracle数据库的CLOB...通过以上配置和操作,你可以在Spring和Hibernate的环境中顺利地对Oracle数据库的CLOB字段进行读写,满足J2EE应用中的大数据存储需求。

    java存取oracle中的COLB类型数据.docx

    首先需要在Oracle数据库中创建一个包含CLOB字段的表。例如: ```sql CREATE TABLE test (id INTEGER, content CLOB); ``` 2. **插入CLOB数据** - 由于CLOB类型的数据不能直接插入,需要先使用`empty_clob()`...

    java存取oracle中的COLB类型数据.pdf

    Java 中访问 Oracle 数据库中的 COLB 类型数据是一种常见的操作。在实际开发中,我们经常需要处理大类型数据,如文本数据、图像数据等。Oracle 中的 COLB 类型数据可以存储大文本数据,最多可存储 4GB 数据。 在 ...

    oracle培训公司笔记1

    - **Linux**:一种免费使用的类Unix操作系统,是Oracle等数据库运行的重要平台之一。 - 学习目标:熟悉一个特定的Linux发行版(如Ubuntu或CentOS),为后续的学习打下坚实的基础。 #### 4. .NET与Oracle - **.NET**...

    ORACLE INTERMEDIA技术在网站内容管理中的应用研究.pdf

    内嵌式存储将多媒体数据直接存储在数据库的BLOB或CLOB字段中,适合于小到中等大小的文件,便于数据的一体化管理。而文件系统存储则将大文件存储在操作系统级别的文件系统中,数据库仅存储文件的元数据,这种方式可以...

    润乾报表4.0在J2EE下的部署.pdf

    - **4.6 其它问题**:比如在Oracle数据库中处理CLOB字段时可能遇到的特殊问题。 ### 总结 润乾报表4.0在J2EE下的部署是一个涉及多个步骤的过程,从创建新应用、配置文件调整到最终的发布都需要仔细规划。对于不同...

    学术会议管理系统毕业论文.pdf

    文中提及的CLOB(Character Large Object)是一种数据库字段类型,它可以存储大量文本数据。数据库技术在管理会议信息、用户数据等方面起到了核心作用。 17. 编程语言和脚本 诸如VBScript、PHP和Perl等编程语言和...

    Spring中文帮助文档

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

    Spring API

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

Global site tag (gtag.js) - Google Analytics