0

这就是我想要做的:

  1. 从 oracle BLOB 中读取图像
  2. 调整大小
  3. 将调整大小的图像写回表(更新 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 上运行。

4

1 回答 1

1

好的,我终于设法解决了这个问题。事实证明是一个狡猾的 JDBC oracle 驱动程序(显然是早期版本)导致了错误。

一旦我切换到正确的版本,错误就消失了!

于 2011-02-23T14:01:27.797 回答