JDBC--处理Blob

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);
    }
}
时间: 2024-11-06 13:43:16

JDBC--处理Blob的相关文章

JDBC ORACLE BLOB处理

LOB,即Large Objects(大对象),是用来存储大量的二进制和文本数据的一种数据类型(一个LOB字段可存储可多达4GB的数据). LOB 分为两种类型:内部LOB和外部LOB. 内部LOB将数据以字节流的形式存储在数据库的内部.因而,内部LOB的许多操作都可以参与事务, 也可以像处理普通数据一样对其进行备份和恢复操作.Oracle支持三种类型的内部LOB: BLOB(二进制数据) CLOB(单字节字符数据) NCLOB(多字节字符数据). CLOB和NCLOB类型适用于存储超长的文本数

JavaWeb学习总结(三十五)——使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

JavaWeb(三十五)——使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

使用JDBC处理Oracle大数据

一.Oracle中大数据处理 在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了.因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据 量非常大的业务领域(如图象.档案等). LOB类型分为BLOB和CLOB两种:BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序.图象.影音等).而CLOB,即字符型大型对象(Character Large Obj

oracle中数据类型对应java类型

地址: http://otndnld.Oracle.co.jp/document/products/oracle10g/102/doc_cd/Java.102/B19275-03/datacc.htm#BHCJBJCC SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型   1.0标准的JDBC类型:     CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.T

如何自学 Java 开发

如何自学 Java 开发? 568赞同反对,不会显示你的姓名 李艾米IT路上学习 568 人赞同 Java Web前端技术 HTML 入门视频课程 1 HTML 简介 2 HTML基本结构[ 3 HTML的BODY标签以及颜色的设定 4 HTML之br标签 5 HTML之p标签 6 HTML之pre标签. 7 HTML之center 8 HTML之引文标签 9 HTML之hr 10 HTML之address 11 HTML之meta 标签 12 HTML之特殊字符 13 HTML之注释 14 H

java_JDBC字段对应

地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm#BHCJBJCC SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型   1.0标准的JDBC类型:     CHAR java.sql.Types.CHAR java.lang.String oracle.sql.CHAR VARCHAR2 java.sql.T

XML文件解析-DOM4J方式和SAX方式

最近遇到的工作内容都是和xml内容解析相关的. 1图片数据以base64编码的方式保存在xml的一个标签中,xml文件通过接口的方式发送给我,然后我去解析出图片数据,对图片进行进一步处理. 2.xml内容保存在blob字段中,然后jdbc读取blob字段获取xml内容进行解析. 解析的方法挺简单的,网上有很多种,主要有SAX,DOM4J等. 先来揭晓一下DOM4J是如何解析xml文件的,话不多少,直接上码. /** * 获取xml文件绝对路径 */ private String getFileP

解决Druid设置Oracle的Clob字段时的小坑

众所周知,Oracle有很多坑, 所以才有了去IOE. 在使用Druid做数据库连接池后,其实偶尔也会碰到小坑,这就是使用开源项目所必须去填平的.[如果使用不开源的产品,那就不是坑,而是陷阱了,你都不知道怎么去填坑] 用Druid连接池,通过JDBC往Oracle数据库的Clob字段插入数据,或者更新数据时,一个问题出现了. 类似于这样: Caused by: java.lang.ClassCastException: com.alibaba.druid.proxy.jdbc.ClobProxy

《结对作业2》——软件工程作业.vo5

软件工程作业.vo5 一.题目选择 我们选择题目一: [x] 能够自动生成四则运算练习题 [x] 可以定制题目数量 [x] 用户可以选择运算符 [x] 用户设置最大数(如十以内.百以内等) [x] 用户选择是否有括号.是否有小数 [x] 用户选择输出方式(如输出到文件.打印机等) 二.职责分配 驾驶员--毕振国-博客地址 导航员--杨颢 三.结果展示 1.操作界面示例 2.输出界面示例 ++(此处应有掌声,啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪--)++ 四.代码审查表 代码地址: https://co