BLOB和CLOB都是大字段类型,
1、BLOB是按二进制来存储的,通常像图片、文件、音乐等信息就用BLOB字段来存储,先将文件转为二进制再存储进去。

2、CLOB是可以直接存储文字的,像文章或者是较长的文字,就用CLOB存储,这样对以后的查询更新存储等操作都提供很大的方便。

Oracle中处理BLOB/CLOB字段的方式比较特别,所以需要特别注意下面两点:

  1. 在Oracle JDBC中采用流机制对 BLOB/CLOB 进行读写操作,所以要注意不能在批处理中读写 BLOB/CLOB字段,否则将出现 Stream type cannot be used in batching 异常。
  2. Oracle BLOB/CLOB 字段本身拥有一个游标(cursor),JDBC通过游标对Blob/Clob字段进行操作,在Blob/Clob字段创建之前,无法获取其游标句柄,会出现 Connection reset by peer: socket write error 异常。

正确的做法是:首先创建一个空 Blob/Clob 字段,再从这个空 Blob/Clob字段获取游标,例如下面的代码:

PreparedStatement ps=conn.prepareStatement("insert into PICTURE(image,resume)
values(?,?)");//通过oralce.sql.BLOB/CLOB.empty_lob()构造空Blob/Clob对象
ps.setBlob(1, oracle.sql.BLOB.empty_lob());
ps.setClob(2, oracle.sql.CLOB.empty_lob());ps.excuteUpdate();
ps.close();//再次对读出Blob/Clob句柄
ps=conn.prepareStatement("select image,resume from PICTURE where id=? for update");
ps.setInt(1 , 100);ResultSet rs=ps.executeQuery();
rs.next();
oracle.sql.BLOB imgBlob=(oracle.sql.BLOB)rs.getBlob(1);
oracle.sql.CLOB resClob=(oracle.sql.CLOB)rs.getClob(2);//将二进制数据写入Blob
FileInputStream inStream=new FileInputStream("c://image.jpg");
OutputStream outStream=imgBlob.getBinaryOutputStream();
byte[] buf=new byte[10240];
int len;
while(len=inStream.read(buf)>0){
outStream.write(buf, 0 ,len);
}
inStream.close();
outStream.cloese();//将字符串写入Clob
resClob.putString(1, "this is a clob");//再将Blob/Clob字段更新到数据库
ps=conn.prepareStatement("update PICTURE set image=? and resume=? where id=?");
ps.setBlob(1, imgBlob);
ps.setClob(2, resClob);
ps.setInt(3, 100 );ps.executeUpdate();
ps.close();

Blob和Clob的区别和用法相关推荐

  1. BLOB与CLOB的区别

    BLOB是按二进制来存储的,而CLOB是可以直接存储文字的. 1.BLOB和CLOB都是大字段类型 2.BLOB是按二进制来存储的 3.CLOB是可以直接存储文字的 4.两个是可以互换的的,或者可以直 ...

  2. oracle中blob转换,BLOB转换为CLOB的函数(oracle中执行)

    BLOB转换为CLOB的函数(oracle中执行) CREATE OR REPLACE FUNCTION BlobToClob(blob_in IN BLOB) RETURN CLOB AS v_cl ...

  3. CLOB、BLOB , CLOB与BLOB的区别

    CLOB 定义 数据库中的一种保存文件所使用的类型. Character Large Object SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系.SQL CLOB 是内置类型,它将字 ...

  4. oracle数据库的blob和clob类型,是什么意思和区别

    BLOB和CLOB都是大字段类型,BLOB是按二进制来存储的,而CLOB是可以直接存储文字的.其实两个是可以互换的的,或者可以直接用LOB字段代替这两个.但是为了更好的管理ORACLE数据库,通常像图 ...

  5. Oracle中Blob和Clob类型的区别

    BLOB是用来存储二进制数据的,而CLOB是用来存储文字的. 1.BLOB     BLOB全称为二进制大型对象(Binary   Large   Object).它用于存储数据库中的大型二进制对象. ...

  6. 操作BLOB、CLOB、BFILE

    BFILE        二进制文件,存储在数据库外的操作系统文件,只读的.把此文件当二进制处理. BLOB        二进制大对象.存储在数据库里的大对象,一般是图像声音等文件. CLOB    ...

  7. mysql 读取clob数据类型_谈谈有关各数据库Blob、Clob类型字段的读取、保存更新

    经常有人谈到Blob类型字段的读写问题,我也来说两句. 最近在写一些东西,对常用数据库的数据类型.函数等作了一些比较,也写了许多了的测试代码,以下是我测试的结果: 测试数据库: MS Sql Serv ...

  8. mysql clob blob,如何在MySQL中插入BLOB和CLOB文件?

    I want to store images and .docx/.doc, .pptx/.ppt, .pdf files using the front end of my software. I ...

  9. model.fit以及model.fit_generator区别及用法

    model.fit以及model.fit_generator区别及用法_猫爱吃鱼the的博客-CSDN博客

最新文章

  1. 从网页模版切图到网页生成全攻略(转)
  2. 双十二自动刷淘宝能量,这个脚本你值得拥有
  3. java基础系列:集合总结(7)
  4. 系统集成资质 -考点分析- “三点估算法”出题的形式演化分析
  5. android广播第三方库,Android Support 库:LocalBroadcastManager
  6. java-web前端 javascript
  7. 合并相同数据的行_R语言笔记(六):数据框重塑(reshape2)
  8. Python刷题-4
  9. python3d绘图代码_python机器学习之3D Matplotlib绘图
  10. 获取System.__ComObject的真正类型
  11. autosize px转dp_干货集中营
  12. 一道SQL题考你数据库的使用能力
  13. VBA实战(6) - 数组
  14. uploadify php demo,php uploadify上传
  15. 已知三点坐标,求圆心坐标 (外接圆)python实现
  16. win10共享打印机搜索不到计算机,Win10系统搜不到共享打印机的解决方法
  17. 双下划线一粗一细怎么加_word 下划线 一粗一细
  18. 开发团队人员配备与角色分配
  19. r720换固态硬盘后如何重装系统_联想解决R720在Raid模式下重装Win10系统无法识别固态硬盘的问题...
  20. 防火墙、WAF、IPS、IDS、堡垒机的区别

热门文章

  1. sap运维要做哪些工作_患上腰椎间盘突出,适合做哪些工作?不适合做哪些工作?...
  2. 基于javaSwing+文本存储的学生信息管理系统设计实现
  3. oel 7.0 安装 mysql 5_在linux上安装PostgreSQL 9.4并启动和关闭数据库
  4. sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库
  5. python编码和解码_uu --- 对 uuencode 文件进行编码与解码 — Python 3.7.9 文档
  6. Python 小白从零开始 PyQt5 项目实战(7)折叠侧边栏的实现
  7. 郑州财税金融职业学院的计算机考试,郑州财税金融职业学院考试流程
  8. 途牛java面试题_途牛java面试题.docx
  9. react把表格渲染好ui_react 入坑笔记(五) - 条件渲染和列表渲染
  10. 单片机c语言 oxfe,AVR单片机入门及C语言高效设计实践(五)