oracle中clob类型的使用

oracle中clob类型的使用oracle 中 clob 类型的使用

转自:http://blog.csdn.net/lin_yongrui/article/details/#

oracle数据库当需要存入大数据量(大于4000)时,varchar2不够用,可以使用clob,本文描述clob怎么和Hibernate一起使用。

以公告Notice的公告内容noticeContent为例说明:

Notice表notice_content字段为clob类型;

Notice类的noticeContent属性为String;


Notice_hbm_xml映射文件为text类型:

 
   
    
  

LOB数据不能象其它类型数据一样直接插入(INSERT)。 插入前必须先插入一个空的LOB对象,CLOB类型的空对象为EMPTY_CLOB (),BLOB类型的空对象为EMPTY_BLOB()

之后通过SELECT命令查询得到先前插入的记录并锁定,继而将空对象修改为所要插入的LOB对象。

StringBuffer sqlstr = new StringBuffer(); sqlstr.append("INSERT INTO notice t (t.notice_id,t.notice_type,t.notice_title," + "t.notice_status,t.sender,t.eff_date,t.exp_date,t.creater,t.create_time," + "t.notice_content) VALUES ("); sqlstr.append(+notice.getNoticeId() + ","); sqlstr.append("'" + notice.getNoticeType() + "',"); sqlstr.append("'" + notice.getNoticeTitle() + "',"); sqlstr.append("'" + notice.getNoticeStatus() + "',"); sqlstr.append("'" + notice.getSender() + "',"); sqlstr.append("sysdate,"); sqlstr.append("to_date('" + theForm.getEndDate2() + " 23:59:59','yyyy-MM-dd HH24:mi:ss'),"); sqlstr.append("'" + notice.getCreater() + "',"); sqlstr.append("sysdate,"); sqlstr.append("empty_clob()");//插入空值 sqlstr.append(")"); String sql = sqlstr.toString(); Class.forName(driverClassName); Connection con = DriverManager.getConnection(url, username, password); con.setAutoCommit(false);//设置不自动提交 PreparedStatement pstmt = con.prepareStatement(sql); String content = notice.getNoticeContent().replace('\'', '\"'); try { pstmt.execute(); con.commit();//插入 pstmt = con.prepareStatement("select notice_content from notice where notice_id="+notice.getNoticeId()+" for update");//查找刚刚插入的那条记录 for update ResultSet res = pstmt.executeQuery(); CLOB clob = null; while(res.next()){ clob = (oracle.sql.CLOB)res.getClob(1); clob.putString(1, content);//content为前台提交过来的公告内容,大数据量 } pstmt = con.prepareStatement("update notice set notice_content = ? where notice_id=?");//修改notice_content字段的内容 pstmt.setClob(1, clob); pstmt.setLong(2, notice.getNoticeId()); pstmt.executeUpdate(); con.commit(); if (nps != null && nps.size() > 0) { noticePartnerDao.saveOrUpdateAll(nps); } } catch (Exception e) { info.setCode("1"); info.setFlag(false); info.setInfo("发布公告失败!"); System.out.println(e.getMessage()); System.out.println(e.getStackTrace()); FileLog.errorLog(e, "发布公告失败"); return info; } finally { if(pstmt!=null) { pstmt.close(); } if(con!=null) { con.close(); } }

对于clob的修改,可在修改该表的其他字段信息时同时将clob字段修改为EMPTY_CLOB (),然后才对clob字段单独修改,方法与上相同。

存入clob类型的文字一般很多,页面不会直接使用textarea,可以使用开源的CKEditor文字编辑器代替,使用方法很简单很实用,详见:CKEditor的使用示例






版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203254.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:14
下一篇 2026年3月19日 下午10:14


相关推荐

  • 什么是语义分割_多模态语义理解

    什么是语义分割_多模态语义理解原文地址:SegNet复现详解:http://mi.eng.cam.ac.uk/projects/segnet/tutorial.html 实现代码:    github                       TensorFlow简介:        SegNet是Cambridge提出旨在解决自动驾驶或者智能机器人的图像语义分割深度网络,开放源码,基于caffe框架。SegNet基于FCN…

    2022年8月21日
    7
  • 常用输入信号及其拉氏变换

    常用输入信号及其拉氏变换1 拉氏变换

    2026年3月18日
    3
  • Laravel 清空配置缓存

    Laravel 清空配置缓存

    2021年10月26日
    50
  • FLASH水波纹效果动画制作教程图文自编「建议收藏」

    FLASH水波纹效果动画制作教程图文自编「建议收藏」这个教程很简单也好学,希望对初步认识FLASH的动画爱好者有帮助,废话少说,下面我们开始制作教程吧教程准备,准备一张带水的风景图片为例,其他没有什么需求一,首先打开FLASH软件8.0,这个版本比较好用,设置文档属性为宽550高400,也是软件默认的属性,背景颜色你可以改为自己喜欢的颜色,这个看由你自己选择,在制作时我比较喜欢用黑色,如图设置好文档属性后,我们点击确定,进入

    2022年5月24日
    47
  • 想修改CSS

    想修改CSS

    2021年7月23日
    56
  • AMD FreeSync显示器上市,这是要把G-Sync虐成渣了「建议收藏」

    AMD FreeSync显示器上市,这是要把G-Sync虐成渣了「建议收藏」玩家玩个游戏也真不容易,配置低的怕卡顿,配置高了帧数漂亮,但又怕画面撕裂,开垂直同步倒是可以解决部分问题,但帧数限制死了又让人觉得很不爽。对于这个问题,NVIDIA2013年10月份推出了G-Sync技术,AMD随后推出了FreeSync技术与之竞争,现在双方的G-Sync及FreeSync显示器都上市了,一场大战是免不了的。这一年半以来,G-Sync与FreeSync虽然没有真

    2022年6月5日
    65

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号