Oracle10g 使用图像文件更新Oracle Blob
这就是我想做的:Oracle10g 使用图像文件更新Oracle Blob,oracle10g,blob,fileinputstream,Oracle10g,Blob,Fileinputstream,这就是我想做的: 从oracle BLOB中读取图像 调整大小 将调整大小的图像写回到表中(更新blob本身) 我的桌子看起来像这样: TECHID非空编号(12) MEDIADATA非空BLOB() 插入日期不为空 MODIFIEDDATE非空日期 第1步和第2步非常有效。步骤3的代码如下所示(这是一种PoC型加标解决方案-非最终产品): File resized=获取调整大小的图像 FileInputStream fis=新的FileInputStream(已调整大小) PreparedSt
resized?.length()?.intValue()
值是否也大于0。所以我很难看出我可能做错了什么
技术堆栈:
Groovy GDK 1.7
Java 1.5
甲骨文10g
在32位Windows XP上运行。好的,我终于解决了这个问题。原来是一个狡猾的JDBCOracle驱动程序(显然是早期版本)导致了这些错误
我一切换到正确的版本,错误就消失了 这与您的问题无关,但您应该知道,
InputStream.available()
不会返回输入流的实际大小!它“返回可以在不阻塞的情况下读取的剩余字节数的估计值”(来自javadocs),感谢这一点,但是,我仅使用该调用以某种方式确保我的流对象不为null。它没有其他用途!
File resized = get the resized image
FileInputStream fis = new FileInputStream(resized)
PreparedStatement p = db.connection.prepareStatement("update mymediadata set mediadata = ? where TECHID=142")
if (fis != null)
{
println("Available: ${fis.available()}"); // this works - shows 117K bytes available.
}
p.setBinaryStream (1, fis, resized?.length()?.intValue())
try
{
p.executeUpdate()
}
catch (Exception e)
{
e.printStackTrace()
}
finally
{
p.close()
fis.close()
}