加载中…
个人资料
月儿
月儿
  • 博客等级:
  • 博客积分:0
  • 博客访问:3,316
  • 关注人气:41
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

java.sql.SQLException: 类型长度大于最大值 clob

(2012-02-27 09:53:51)
标签:

clob

oracle

分类: 数据库

操作Oracle类型CLOB和BLOB

分类: ADF 2009-12-17 13:22 333人阅读 评论(2) 收藏 举报

Oracle中,Varchar2支持的最大字节数为4KB,所以对于某些长字符串的处理,我们需要用CLOB类型的字段,CLOB字段最大支持4GB。

 

还有其他几种类型:

blob:二进制,如果exe,zip
clob:单字节码,比如一般的文本文件.
nlob:多字节码,如UTF格式的文件.

以下就是对CLOG字段的操作方法,在我们的项目中帮助文档部分用到。

1、首先是写入

[java:firstline[1]] view plaincopyprint?
  1.       
  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.            
  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.    

 

2、修改CLOB字段内容

  1.       
  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.    

 

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

  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);  
  27. 是jdbc驱动有问题。  

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有