a) What type of field should I put in the database? (e.g VARCHAR)
An image is binary data. Just use a binary field. In PostgreSQL it's bytea
.
b) What type of object should I use for storing and manipulating the image (at an object layer)? (e.g java.awt.Image)
Use an InputStream
or byte[]
to store it. The Java 2D API has classes/methods which can take/return either of those types.
c) How do I create an object of the type selected (answer of question b) from the data obtained from the database?
Use ResultSet#getBinaryStream()
to get an InputStream
of it or ResultSet#getBytes()
to get a byte[]
of it.
d) How do I save an object of the type selected (answer of question b) to the database?
Use PreparedStatement#setBinaryStream()
or PreparedStatement#setBytes()
. Note: if you're new to JDBC/PreparedStatement
as well, then I recommend you to get yourself through the Sun basic JDBC tutorial.
e) How do I draw the image on a web page?
Use a HTML <img>
element whose src
points to an URL matching the url-pattern
of a Servlet
. You can pass the image identifier as request parameter or pathinfo. Inside the Servlet
you just write the obtained InputStream
to the OutputStream
of 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.