Java 保存到Oracle表时Blob被截断

Java 保存到Oracle表时Blob被截断,java,jdbc,Java,Jdbc,将图像作为blob保存到Oracle表时,blob有时会被截断 如果图像被截断,它总是在同一位置被截断 而且,这不是尺寸问题,这是第一个显而易见的答案。一幅截短的图像是126Kb,一幅精细的图像是3Mb blob列没有指定大小,因此根据Oracle,它默认为2Gb java代码是: OutputStream os = null; try { os = image.getImage().getBinaryOutputStream(); os.write(uploadFile.get

将图像作为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();
    }
}