java - 保存到 Oracle 表时 Blob 被截断

标签 java jdbc

将图像作为 Blob 保存到 Oracle 表时,Blob 有时会被截断。

如果图像被截断,它总是在同一位置被截断。

此外,这不是尺寸问题,这是第一个明显的答案。一张截断的图像为 126Kb,一张精细的图像为 3Mb

blob 列没有指定大小,因此根据 Oracle,它默认为 2Gb。

java代码是:

OutputStream os = null;
try {
    os = image.getImage().getBinaryOutputStream();
    os.write(uploadFile.getFileData());

} catch (Exception e) {
    af = mapping.findForward("imageProblem");
} 

最佳答案

这是因为我忘记关闭 OutputStream 造成的。在将 blob 写入表之前,它正在以令人惊讶的确定性方式被垃圾收集(我认为)。关闭流解决了问题:

OutputStream os = null;
try {
    os = image.getImage().getBinaryOutputStream();
    os.write(uploadFile.getFileData());

} catch (Exception e) {
    af = mapping.findForward("imageProblem");
} finally {
    if (os != null) {
      os.close();
    }
}

关于java - 保存到 Oracle 表时 Blob 被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18790412/

相关文章:

java - 根据 RFC 3986 的无效 URI 示例

java - 未经检查的从通用 T 转换为可比较的阻止编译

java - 有没有办法将 jMenuBar 移动到 jFrame 顶部以外的其他位置?

java - 获取 Java 结果集中的行数

java - SQL错误: check the manual that corresponds to your MySQL server version for the right syntax

mysql - jdbc 程序中出现 ClassNotFoundException

java - 将 Actionlistener(按钮)绑定(bind)到 Resultset.next

java - 从 Long id 生成唯一哈希

java - 从 8u144 更新 Java 后无法使用 ojdbc8 连接到 Oracle DB - 8u171 之后的任何更新(包括 8u171)

Java 枚举 - 枚举上的 Switch 语句与访问者模式 - 性能优势?