这就是我想要做的:
- 从 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 上运行。