给定一个物体X;我希望这个对象有一个图像。图像必须存储在数据库中。我无法存储路径,实际图像必须在数据库中。
回答以下问题可以回答我的问题:
A)。我应该在数据库中放入什么类型的字段? (例如VARCHAR)
b)我应该使用什么类型的对象来存储和操作图像(在对象层)? (例如java.awt.Image)
c)如何从数据库中获取的数据创建所选类型的对象(问题b的答案)?
d)如何将所选类型的对象(问题b的答案)保存到数据库?
e)如何在网页上绘制图像?
我正在使用PostgreSQL,Java,它是一个Web应用程序。
谢谢!
答案 0 :(得分:5)
a)我应该在数据库中放入什么类型的字段? (例如VARCHAR)
图像是二进制数据。只需使用二进制字段。在PostgreSQL中它是bytea
。
b)我应该使用什么类型的对象来存储和操作图像(在对象层)? (例如java.awt.Image)
使用InputStream
或byte[]
进行存储。 Java 2D API具有可以获取/返回这些类型的类/方法。
c)如何从数据库中获取的数据创建所选类型的对象(问题b的答案)?
使用ResultSet#getBinaryStream()
获取InputStream
或ResultSet#getBytes()
获取byte[]
。
d)如何将所选类型的对象(问题b的答案)保存到数据库?
使用PreparedStatement#setBinaryStream()
或PreparedStatement#setBytes()
。注意:如果您刚接触JDBC / PreparedStatement
,那么我建议您完成Sun basic JDBC tutorial。
e)如何在网页上绘制图像?
使用HTML <img>
元素,其src
指向与url-pattern
的{{1}}匹配的网址。您可以将图像标识符作为请求参数或pathinfo传递。在Servlet
内部,您只需将获得的Servlet
写入响应的InputStream
,这是通常的Java IO方式。你可以在我前一段时间发布的this answer中找到一个代码示例。
也就是说,将仅原始图像存储在数据库中通常不是一个好主意。您最好还应该在其中存储一些元数据,例如content type(例如OutputStream
,image/jpeg
等),您需要在响应标头中,以便浏览器知道要做什么做它。
答案 1 :(得分:0)
您可以将对象另存为PostGreSQL blob。它们可以作为二进制数据存储在数据库中。 http://www.postgresql.org/files/documentation/books/aw_pgsql/node96.html可以提供帮助。然后,您可以使用Servlet OutputStream编写二进制输入。这link可能会有所帮助。