Oracle知识点(一)—Java读写Blob

1 测试表

create table blob_demo(
    id VARCHAR2(50),
    image blob,
    content blob
)

2 新增一条表数据

2.1 目的

插入一条记录,其中image列存储图片,contet存储正常的文本。

2.2 核心代码

    /**
     * 新增一条数据
     * @param conn
     */
    public void addOneData(Connection conn){
        try {
            String sql = "insert into blob_demo(id, image, content) values(?,?,?)"; //执行的插入sql语句
            String pngPath = "/Users/xxxxx/Downloads/test.png"; //图片路径
            String content = "this is a test"; //待写入content列的内容

            InputStream ins = new FileInputStream(pngPath); //把图片转为io流

            PreparedStatement preStat = conn.prepareStatement(sql);
            preStat.setString(1, "1");
            preStat.setBlob(2, ins);
            preStat.setBlob(3, new ByteArrayInputStream(content.getBytes()));
            preStat.executeUpdate();

            LOG.info("数据新增成功!");
        }catch (Exception e){
            LOG.error("新增数据失败:{}", e.getMessage());
        }
    }

3 读取表数据

3.1 目的

查找一条数据,将image字段的图片另存为名称为test_bak.png,将content的内容转为string打印在控制台上。

3.2 核心代码

    /**
     * 读取数据
     * @param conn
     */
    public void readData(Connection conn){
        Statement stat = null;
        ResultSet rs = null;

        try {
            String sql = "select id, image, content from blob_demo where id=‘1‘";
            long BlobLength = 0;
            int i = 1;
            byte[] bytes = null;
            String content = "";
            String filepath = "/Users/weixiurui/Downloads/test_bak.png";

            stat = conn.createStatement();
            rs = stat.executeQuery(sql);

            while (rs.next()){
                content = "";

                BLOB imageCol = (BLOB) rs.getBlob("image");
                BLOB contentCol = (BLOB) rs.getBlob("content");

                LOG.info("开始处理image内容...");
                //输出到图片/文件
                InputStream input = imageCol.getBinaryStream();
                FileOutputStream out = new FileOutputStream(filepath);
                int len = (int) imageCol.length();
                byte buffer[] = new byte[len];
                while ((len = input.read(buffer)) != -1) {
                    out.write(buffer, 0, len);
                }
                out.close();
                input.close();
                LOG.info("图片下载完成,请到对应的目录下查看");

                LOG.info("开始处理content内容...");
                //将blob转为string
                BlobLength = contentCol.length();  //获取BLOB长度
                while(i<BlobLength) {  //循环处理字符串转换,每次1024;Oracle字符串限制最大4k
                    bytes = contentCol.getBytes(i,1024) ;
                    i = i + 1024;
                    content = content + new String(bytes,"utf8") ;
                }
                LOG.info("content内容为[{}]", content);
            }
        }catch (Exception e){
            LOG.error("操作失败:{}", e.getMessage());
        }
    }

4 参考文章

java读取oracle数据库中blob字段

Oracle一条SQL插入Blob类型数据_JAVA

java读写Oracle Blob字段

原文地址:https://www.cnblogs.com/yxdz2018/p/10387118.html

时间: 2024-10-16 19:02:29

Oracle知识点(一)—Java读写Blob的相关文章

java 读写Oracle Blob字段

许久没有分享代码了,把这段时间写的一个Java操作Blob字段,有日子没写Java了,就当作笔记记录一下.1. [代码][Java]代码     跳至 [1] [全屏预览]package com.wanmei.meishu;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.FileReader;import java.io.InputStream;import java.io.OutputS

java读取blob全身乱码

一.BLOB操作 1.入库 (1)JDBC方式 //通过JDBC获得数据库连接 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:testdb", "test", "test"); con.setAutoCommit(fa

java读写文件

读文件 package tool; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.OutputStreamWriter; public class ReadFile { pu

Java 读写Properties配置文件

Java 读写Properties配置文件 1.Properties类与Properties配置文件 Properties类继承自Hashtable类并且实现了Map接口,也是使用一种键值对的形式来保存属性集.不过Properties有特殊的地方,就是它的键和值都是字符串类型. 2.Properties中的主要方法 (1)load(InputStream inStream)   这个方法可以从.properties属性文件对应的文件输入流中,加载属性列表到Properties类对象.如下面的代码

[独孤九剑]Oracle知识点梳理(十)%type与%rowtype及常用函数

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(八)常见Exception

[独孤九剑]Oracle知识点梳理(八)常见Exception

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(九)数据库常用对象之常见package

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Curs

[独孤九剑]Oracle知识点梳理(四)SQL语句之DML和DDL

本系列链接导航: [独孤九剑]Oracle知识点梳理(一)表空间.用户 [独孤九剑]Oracle知识点梳理(二)数据库的连接 [独孤九剑]Oracle知识点梳理(三)导入.导出 [独孤九剑]Oracle知识点梳理(五)数据库常用对象之Table.View [独孤九剑]Oracle知识点梳理(六)数据库常用对象之Procedure.function.Sequence [独孤九剑]Oracle知识点梳理(七)数据库常用对象之Cursor [独孤九剑]Oracle知识点梳理(八)常见Exception