【发布时间】:2015-09-17 05:31:18
【问题描述】:
我正在从 Wolfram|Alpha 检索 gif 图像。为了尽量减少查询,我想存储这些图像并且只在数据更改时查询 W|A,所以我将图像作为 bytea 数据类型存储在我的 postgres 数据库中。 “保存”部分似乎正在工作,因为有数据。 System.out.println(rs.getString("fnPlotImg")) 产生这个:\x4275666665726564496d6167654035356437373834323a2074797065203d203120446972656374436f6c6f724d6f64656c3a20726d61736b3d66663030303020676d61736b3d6666303020626d61736b3d666620616d61736b3d3020496e7465676572496e7465726c65617665645261737465723a207769647468203d2032303020686569676874203d20313335202342616e6473203d203320784f6666203d203020794f6666203d203020646174614f66667365745b305d2030
我已经能够使用这段代码成功地从 W|A 更新图像:
String path = ((WAImage) element).getURL();
URL url = new URL(path);
BufferedImage image = ImageIO.read(url);
picLabel.setIcon(new ImageIcon(image));
我想用数据库中的图像更新我的应用程序并尝试了以下代码:
byte[] ba = rs.getBytes("fnPlotImg");
try{
picLabel.setIcon(new ImageIcon(ba));
} catch (NullPointerException e) {
e.printStackTrace();
}
我的理由是 bytea 是一个字节数组,getBytes() 应该检索一个字节数组,而 ImageIcon() 应该处理一个字节数组。但是,如果我不构建空指针异常它错误出来。我认为这是因为我没有将图像正确保存到数据库,或者我没有正确检索它。
欢迎所有想法,我已经很累了,所以我会在早上用新鲜的眼睛检查。
【问题讨论】:
-
你是如何将图像存储在数据库中的?
-
通过 SQL 将其与相关数据作为 BufferedImage 插入...我突然想到我没有检查这是否是正确的做法。
-
我认为您想写入文件图像数据,而不是
BufferedImage,例如 this。这样您只需阅读bytea、InputStream到ImageIO -
我会在早上试试你的建议,谢谢你的意见。
标签: java postgresql