【转载】JDBC操作LOB字段

转自:http://www.cnblogs.com/tengtao93/p/4984689.html

1、LOB(Large Objects)大对象,是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储多达4GB的数据)

--LOB分类两种类型:1)内部LOB; 2)外部LOB:

  --内部LOB将数据以字节流的形式存储在数据库的内部。因而,内部LOB的许多操作都可以参与事务,也可以像处理普通数据一样对其进行备份和恢复操作;

    --Oracle支持三种类型的内部LOB:1)BLOB(二进制数据);2)CLOB(单字节字符数据);3)NCLOB(多字节字符数据);

    --CLOB和NCLOB类型适用于存储超长的文本数据,BLOB字段适用于存储大量的二进制数据,如图像、视频、文件等。

  --外部LOB:目前只支持一种外部LOB类型,即BFILE类型,该类型仅存储数据在操作系统中的位置信息,而数据的实体以外部文件的形式存在于文件系统中。

    --BFILE类型所表示的数据都是只读的,不参与事务。该类型可帮助用户管理大量的由外部程序访问的文件。

2、使用JDBC向数据库插入BLOB类型的数据时必须使用PreparedStatement。

3、向Oracle数据库插入Blob类型数据

复制代码
public void insertBlobData(){
    Connection conn = null;
    PreparedStatement ps = null; String sql = "INSERT INTO customers(id, name, picture) VALUES(?,?,?)"; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1, 12345); ps.setString(2, "Alice"); InputStream in = new FileInputStream("test.jpg"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1024]; int len; while((len = in.read(b)) != -1){ baos.write(b, 0, len); } ps.setBytes(3, baos.toByteArray()); ps.executeUpdate(); in.close(); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, null); } }
复制代码

4、从Oracle数据库中读取Blob类型的数据并通过IO流写入文件中:

复制代码
public void readBlobData(){
    Connection conn = null;
    PreparedStatement ps = null; ResultSet rs = null; String sql = "SELECT id, name, picture FROM customers WHERE id = ?"; try{ conn = JDBCUtils.getConnection(); ps = conn.prepareStatement(sql); ps.setInt(1, 12345); rs = ps.executeQuery(); if(rs.next()){ Blob blob = rs.getBlob(3); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("out.jpg")); InputStream in = blob.getBinaryStream(); byte[] b = new byte[1024]; int len; while((len = in.read(b)) != -1){ bos.write(b,0, len); bos.flush(); } bos.close(); in.close(); } }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn, ps, rs); } }
复制代码

转载于:https://www.cnblogs.com/YangtzeYu/p/6225308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值