a) Какой тип поля я должен поместить в базу данных? (например, VARCHAR)
Изображение является двоичными данными. Просто используйте двоичное поле. В PostgreSQL это bytea
.
б) Какой тип объекта я должен использовать для хранения и управления изображением (на уровне объекта)? (например, java.awt.Image)
Используйте InputStream
или byte[]
для его хранения. Java 2D API имеет классы / методы, которые могут принимать / возвращать любой из этих типов.
в) Как создать объект выбранного типа (ответ на вопрос б) из данных, полученных из базы данных?
Используйте ResultSet#getBinaryStream()
, чтобы получить InputStream
этого или ResultSet#getBytes()
, чтобы получить byte[]
этого.
d) Как сохранить объект выбранного типа (ответ на вопрос b) в базе данных?
Используйте PreparedStatement#setBinaryStream()
или PreparedStatement#setBytes()
. Примечание: если вы новичок в JDBC / PreparedStatement
, то я рекомендую вам ознакомиться с базовым учебным пособием по JDBC Sun .
e) Как нарисовать изображение на веб-странице?
Используйте элемент HTML <img>
, чей src
указывает на URL, соответствующий url-pattern
из Servlet
. Вы можете передать идентификатор изображения в качестве параметра запроса или pathinfo. Внутри Servlet
вы просто записываете полученный InputStream
в OutputStream
ответа обычным способом Java IO. Вы можете найти пример кода в этом ответе Я отправил некоторое время назад.
Тем не менее, хранение только необработанных изображений в базе данных, как правило, не очень хорошая идея. Желательно также хранить некоторые метаданные, такие как тип контента (например, image/jpeg
, image/gif
и т. Д.), Которые вам, в конце концов, нужны в заголовке ответа, чтобы браузер знал, что делать с этим.