Oracle blob类型数据转换成 base64编码

需求大概是这样的

base64编码列表的Json格式字符串,图片文件格式是jpg,形如:


"[{"employ_files": "/9j/4AAQSkZJRgABAQEAYABgAAD"},{"employ_files": "/9j/4AAQSkZJRgABAQEAYABgAAD"}]"

其中employ_files是必填子项 




CREATE OR REPLACE FUNCTION base64encode(p_blob IN BLOB)
  RETURN CLOB
-- -----------------------------------------------------------------------------------
-- File Name    : https://oracle-base.com/dba/miscellaneous/base64encode.sql
-- Author       : Tim Hall
-- Description  : Encodes a BLOB into a Base64 CLOB.
-- Last Modified: 09/11/2011
-- -----------------------------------------------------------------------------------
IS
  l_clob CLOB;
  l_step PLS_INTEGER := 12000; -- make sure you set a multiple of 3 not higher than 24573
BEGIN
  FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_blob) - 1 )/l_step) LOOP
    l_clob := l_clob || UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_encode(DBMS_LOB.substr(p_blob, l_step, i * l_step + 1)));
  END LOOP;
  RETURN l_clob;
END;
/


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29990276/viewspace-2647745/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29990276/viewspace-2647745/

### 如何在 Oracle 数据库中将 Base64 编码的数据存入 BLOB 字段 #### 准备工作 为了能够顺利地把 Base64 编码数据转换二进制流并存储到 `BLOB` 类型字段里,在此之前需要确认已经具备了可以连接至目标 Oracle 数据库环境的能力以及拥有适当权限来执行插入操作。 #### 创建表结构 假设有一个名为 `MEDIA_FILES` 的表格用于保存多媒体文件信息,其中包含一个 `FILE_DATA` 列作为 `BLOB` 来容纳实际的文件内容: ```sql CREATE TABLE MEDIA_FILES ( ID NUMBER GENERATED BY DEFAULT AS IDENTITY, FILE_NAME VARCHAR2(255), MIME_TYPE VARCHAR2(100), FILE_SIZE NUMBER, FILE_DATA BLOB, CREATED_AT TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, PRIMARY KEY (ID) ); ``` #### Java 实现示例 考虑到现代应用程序通常采用编程方式与数据库交互,这里给出一段基于 Spring Framework 和 JDBC Template 的简单例子展示怎样完这项任务。这段代码会先解码传入字符串形式的 Base64 编码数据再将其写入指定记录中的 `BLOB` 属性内。 ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import javax.xml.bind.DatatypeConverter; import java.sql.Blob; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; @Repository public class MediaFileDao { private final JdbcTemplate jdbcTemplate; @Autowired public MediaFileDao(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } /** * 插入新的媒体条目并将 base64 编码的内容解析为 blob 存储. */ void insertMediaEntry(String fileName, String mimeType, int fileSize, String fileContentBase64Encoded) throws SQLException { try (Connection conn = jdbcTemplate.getDataSource().getConnection(); PreparedStatement pstmt = conn.prepareStatement( "INSERT INTO media_files(FILE_NAME,MIME_TYPE,FILE_SIZE,FILE_DATA)" + " VALUES (?, ?, ?, EMPTY_BLOB()) RETURNING FILE_DATA INTO ?")) { byte[] decodedBytes = DatatypeConverter.parseBase64Binary(fileContentBase64Encoded); Blob lob = conn.createBlob(); lob.setBytes(1L, decodedBytes); // 将字节数组设置给 LOB 对象 pstmt.setString(1, fileName); pstmt.setString(2, mimeType); pstmt.setInt(3, fileSize); pstmt.setBlob(4, lob); pstmt.executeUpdate(); System.out.println("功插入了一条新纪录!"); } } } ``` 上述过程展示了如何通过程序逻辑处理 Base64 编码串,并最终调用 SQL 语句向 Oracle 表格里的 `BLOB` 字段赋值[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值