You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java将base64格式图片插入Oracle数据库的BLOB字段

解决方案

核心思路

不要直接拼接SQL传入长字符串,使用PreparedStatement预编译SQL+参数绑定的方式写入BLOB,完全避开SQL字面量长度限制、SQL截断、SQL注入等问题。

具体实现步骤

  • 第一步:将base64格式的图片字符串解码为字节数组
  • 第二步:使用预编译SQL,通过参数占位符绑定传入数据
  • 第三步:执行插入操作

代码示例

import java.util.Base64;
import java.sql.PreparedStatement;
import java.sql.Connection;

// 你的base64图片字符串
String image64 = "/9j/4AAQSkZJRgABAQAAAQABAAD......RzUUUBB2UtRREOFFFFpa//Z";
// 1. 解码base64为字节数组
byte[] imageBytes = Base64.getDecoder().decode(image64);

// 2. 编写预编译SQL,用?作为参数占位符
String sql = "INSERT INTO INFO (IMAGE) VALUES (?)";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    // 3. 绑定BLOB参数,直接传入字节数组即可,JDBC会自动适配Oracle BLOB类型
    pstmt.setBytes(1, imageBytes);
    // 4. 执行插入
    pstmt.executeUpdate();
}

原方案失效原因说明

  • ORA-01704报错是因为Oracle中硬编码在SQL里的字符串字面量默认最大长度为4000字节,超过就会触发报错
  • 分片拼接的方案除了会遇到SQL总长度限制导致截断外,还存在性能差、容易出现语法错误、有SQL注入风险等问题,不推荐使用
  • 如果确实需要在数据库层面完成base64转BLOB的操作,也可以用预编译绑定参数的方式,将base64字符串直接传入数据库函数处理,代码如下:
String sql = "INSERT INTO INFO (IMAGE) VALUES (utl_encode.base64_decode(utl_raw.cast_to_raw(?)))";
try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
    pstmt.setString(1, image64);
    pstmt.executeUpdate();
}

内容的提问来源于stack exchange,提问作者Vinícius Abner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:36:02