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

Oracle数据库存储PDF报错:数据大小超类型最大值求解决方案

解决Oracle存储大PDF文件时的Data size bigger than max size错误

嘿,这个问题我之前也踩过坑,刚好能帮到你!你碰到的java.sql.SQLException: Data size bigger than max size for this type: 71365错误,核心原因其实很明确——要么是数据库字段类型不够大,要么是老版本JDBC驱动的处理限制,咱们一步步来解决:

1. 先检查数据库表的字段类型

你能存30KB以内的文件,超过就报错,这刚好对应Oracle里LONG RAW类型的最大限制(32767字节,约32KB)。所以首先要确认你存储文件的字段是不是用了LONG RAW,如果是,赶紧改成BLOB类型——BLOB最大能存4GB,完全满足大文件的需求。

修改字段的SQL语句如下:

ALTER TABLE your_table_name MODIFY your_file_column BLOB;

(记得把your_table_name和your_file_column替换成你实际的表名和字段名)

2. 优化JDBC代码的BLOB写入方式

你当前用的setBinaryStream方法在老版本ojdbc14里,对大文件的支持可能有局限。建议换成setBlob方法,手动创建Blob对象并写入数据,这样更稳定:

InputStream FILE_CONTENT = null;
Part filePart = req.getPart("pdf_file");
if (filePart != null ) {
    // 保留调试信息
    logger.info("File Name::"+filePart.getName());
    logger.info("File Size::"+filePart.getSize());
    logger.info("File Type::"+filePart.getContentType());

    InputStream inputStream = filePart.getInputStream();
    // 创建Blob对象
    Blob blob = connection.createBlob();
    OutputStream blobOutputStream = blob.setBinaryStream(1);
    
    // 用缓冲区读写数据,避免内存溢出
    byte[] buffer = new byte[4096];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        blobOutputStream.write(buffer, 0, bytesRead);
    }
    
    // 关闭流,释放资源
    blobOutputStream.close();
    inputStream.close();
    
    // 设置Blob参数到PreparedStatement
    cs.setBlob(1, blob);
}

3. 考虑升级JDBC驱动版本

ojdbc14是适配JDK1.4的老驱动了,对大BLOB的处理存在一些已知的限制和bug。如果你的项目环境允许,建议升级到更高版本的ojdbc,比如ojdbc6(适配JDK6)或者ojdbc8(适配JDK8+),新驱动对大对象的支持更完善,能避免很多奇怪的问题。

4. 调整JDBC连接的LOB预取参数

如果升级驱动暂时做不到,可以试试在JDBC连接URL里添加defaultLobPrefetchSize参数,设置一个较大的值,比如1MB:

jdbc:oracle:thin:@//your_db_host:1521/your_service_name?defaultLobPrefetchSize=1048576

这个参数能调整驱动预取LOB数据的大小,避免因预取限制导致的写入失败。

按照这几步来,应该就能解决大PDF存储的问题了!

内容的提问来源于stack exchange,提问作者Tell Me How

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:26:22