这就是我想要做的:
- 从 oracle BLOB 中读取图像
- 调整大小
- 将调整大小的图像写回表(更新 blob 本身)。
我的表如下所示:
TECHID 非空数字 (12)
MEDIADATA 非空 BLOB()
INSERTEDDATE 非空日期
修改日期非空日期
步骤 1 和 2 完美运行。第 3 步的代码如下(这是 PoC 类型的尖峰解决方案 - 不是最终生产):
调整大小的文件 = 获取调整大小的图像 FileInputStream fis = new FileInputStream(resized) PreparedStatement p = db.connection.prepareStatement("update mymediadata set mediadata = ? where TECHID=142") 如果 (fis != null) { println("可用:${fis.available()}"); // 这有效 - 显示 117K 字节可用。 } p.setBinaryStream (1, fis, resized?.length()?.intValue()) 尝试 { p.executeUpdate() } 捕获(异常 e) { e.printStackTrace() } 最后 { p.close() fis.close() }
当我进入第 3 步时,出现以下错误:
SQLException: ORA-01407: 无法将 ("OWNER"."MEDIADATA"."MEDIADATA") 更新为 NULL
我明确检查(在调试器中)FileInputStream(fis)不为空。我还检查了该resized?.length()?.intValue()
值是否也 > 0。所以我很难看到我可能做错了什么。
技术栈:
Groovy GDK 1.7 Java 1.5 Oracle 10g
在 32 位 Windows XP 上运行。