Given an object X; I want this object to have an image. The image must be stored in the database. I can’t store the path, the actual image must be in the database.
My question can be answered by answering the following subquestions:
a). What type of field should I put in the database? (e.g VARCHAR)
b) What type of object should I use for storing and manipulating the image (at an object layer)? (e.g java.awt.Image)
c) How do I create an object of the type selected (answer of question b) from the data obtained from the database?
d) How do I save an object of the type selected (answer of question b) to the database?
e) How do I draw the image on a web page?
I am using PostgreSQL, Java and it is a web application.
Thanks!
An image is binary data. Just use a binary field. In PostgreSQL it’s
bytea.Use an
InputStreamorbyte[]to store it. The Java 2D API has classes/methods which can take/return either of those types.Use
ResultSet#getBinaryStream()to get anInputStreamof it orResultSet#getBytes()to get abyte[]of it.Use
PreparedStatement#setBinaryStream()orPreparedStatement#setBytes(). Note: if you’re new to JDBC/PreparedStatementas well, then I recommend you to get yourself through the Sun basic JDBC tutorial.Use a HTML
<img>element whosesrcpoints to an URL matching theurl-patternof aServlet. You can pass the image identifier as request parameter or pathinfo. Inside theServletyou just write the obtainedInputStreamto theOutputStreamof the response the usual Java IO way. You can find a code example in this answer I posted some time ago.That said, storing only raw images in a database is generally not a good idea. You should preferably also store some metadata along it, such as the content type (e.g.
image/jpeg,image/gif, etc) which you after all need in the response header so that the browser knows what to do with it.