Как добавить изображение в базу данных MySql с помощью сервлета и JDBC
Язык структурированных запросов или SQL - это стандартный язык баз данных, который используется для создания, обслуживания и извлечения данных из реляционных баз данных, таких как MySQL, Oracle, SQL Server, PostGre и т. Д. В этой статье мы поймем, как добавить изображение в База данных MYSQL с использованием сервлета.
MYSQL - это реляционная база данных. Реляционная база данных означает, что данные хранятся, а также извлекаются в виде отношений (таблиц). Сервлеты - это программы Java, которые выполняются на веб-сервере или сервере приложений с поддержкой Java. Они используются для обработки запроса, полученного с веб-сервера, обработки запроса, создания ответа, а затем отправки ответа обратно на веб-сервер. Свойства сервлетов заключаются в том, что они работают на стороне сервера. И они способны обрабатывать сложные запросы, полученные с веб-сервера. В этой статье Eclipse IDE используется для выполнения сервлета, а рабочая среда MYSQL используется для запуска базы данных MYSQL. Чтобы добавить изображение в базу данных MYSQL с помощью сервлета и JDBC, можно выполнить следующие шаги:
- Шаг 1. Откройте Eclipse IDE и в правом верхнем углу вы найдете 2 значка. При наведении курсора отобразятся JAVA EE и JAVA. Поскольку мы будем работать с веб-проектом, мы выберем JAVA EE. После его выбора перейдите в Файл -> Создать -> Динамический веб-проект .
- Шаг 2: Теперь нам нужно скопировать и вставить драйвер JDBC для MySQL (коннектор - JAR_FILE) в папку lib папки WEB-INF, которая находится в папке WebContent. (Здесь должны быть все внешние библиотеки для проекта).
- Шаг 3: Теперь нам нужно создать домашнюю страницу, которая будет представлять форму, в которую пользователь может загрузить файл изображения. Мы можем создать как JSP, так и HTML файл в папке WebContent. Например, мы создадим AddFile.jsp . Нам также необходимо обновить файл web.xml, чтобы обновить его список приветственных файлов. Мы должны добавить AddFile.jsp в список приветственных файлов.
<
welcome-file-list
>
<
welcome-file
>AddFile.jsp</
welcome-file
>
</
welcome-file-list
>
- Шаг 4: Теперь нам нужно добавить код для AddFile.jsp, который был создан выше. Код этого файла следующий:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<
html
>
<
head
>
<
meta
charset
=
"ISO-8859-1"
>
<
title
>Add File Here</
title
>
</
head
>
<
body
>
<
form
method
=
"post"
action
=
"serv"
enctype
=
"multipart/form-data"
>
<
div
>
<
label
>First Name:</
label
>
<
input
type
=
"text"
name
=
"firstName"
size
=
"50"
/>
</
div
>
<
div
>
<
label
>Last Name:</
label
>
<
input
type
=
"text"
name
=
"lastName"
size
=
"50"
/>
</
div
>
<
div
>
<
label
>Profile Photo: </
label
>
<
input
type
=
"file"
name
=
"photo"
size
=
"50"
/>
</
div
>
<
input
type
=
"submit"
value
=
"Save"
>
</
form
>
</
body
>
</
html
>
- Шаг 5: Теперь мы создадим класс, который будет использоваться для установления соединения с базой данных MySql с помощью JDBC и может использовать это соединение в любое время в будущем, чтобы отражать что-либо в базе данных. Например, мы создадим класс MyConnection.java и статический метод getConnection (), чтобы получить соединение следующим образом:
import
java.sql.*;
public
class
MyConnection {
public
static
Connection getConnection()
{
// As java.sql package classes
// contains Checked Exceptions,
// we have to surround it with
// Try/Catch Block.
try
{
// We have to register the
// Driver class present in
// com.mysql.jdbc package.
DriverManager.registerDriver(
new
com.mysql.jdbc.Driver());
// To get the connection,
// 3 params need to be passed in
// DriverManager.getConnection() method.
Connection con
= DriverManager.getConnection(
"jdbc: mysql:// localhost:3306/"
+
"FileUploadDatabase"
,
"root"
,
"root"
);
/* 1. URL: "jdbc: mysql:// ", is the address
"localhost: " is the local machine
and "3306" is the port number
and "FileUploadDatabase" is the name
of the database.
2. UserName: "root", which is set
while creating a database server in
MySql Workbench.
3. Password: "root"
*/
return
con;
}
catch
(SQLException e) {
System.out.println(e.getMessage());
}
return
null
;
}
}
- Шаг 6: Теперь мы создадим базу данных и таблицу «пользователи», в которой будет храниться содержимое, переданное из HTML-формы. Запрос на то же самое выглядит следующим образом:
CREATE DATABASE FileUploadDatabase
CREATE TABLE users (
id int(11) NOT NULL AUTO_INCREMENT,
first_name varchar(45) DEFAULT NULL,
last_name varchar(45) DEFAULT NULL,
photo mediumblob,
PRIMARY KEY (`id`)
) - Шаг 7: Теперь мы создадим сервлет, который будет принимать запрос с веб-страницы, выполнять всю бизнес-логику и сохранять содержимое в базе данных MySql. Например, мы назовем его «serv.java». Ниже приведен код этого сервлета:
// Java program to implement
// the servlet
controllers;
package
import
java.io.IOException;
import
java.io.InputStream;
import
java.sql.Connection;
import
java.sql.PreparedStatement;
import
java.sql.SQLException;
import
javax.servlet
.ServletConfig;
import
javax.servlet
.ServletException;
import
javax.servlet
.annotation.MultipartConfig;
import
javax.servlet
.annotation.WebServlet;
import
javax.servlet
.http.HttpServlet;
import
javax.servlet
.http.HttpServletRequest;
import
javax.servlet
.http.HttpServletResponse;
import
javax.servlet.http.Part;
import
Dao.UploadFileDao;
import
connection.copy.MyConnection;
// This is the annotation-based
// mapping URL to Servlet.
@WebServlet
(
"/serv"
)
// This annotation defines the maximum
// file size which can be taken.
@MultipartConfig
(maxFileSize =
16177215
)
public
class
serv
extends
HttpServlet {
// auto generated
private
static
final
long
serialVersionUID = 1L;
public
serv()
{
super
();
}
// This Method takes in All the information
// required and is used to store in the
// MySql Database.
public
int
uploadFile(String firstName,
String lastName,
InputStream file)
{
String SQL
=
"INSERT INTO users "
+
"(first_name, last_name, "
+
"photo) values (?, ?, ?)"
;
int
row =
0
;
Connection connection
= MyConnection.getConnection();
PreparedStatement preparedStatement;
try
{
preparedStatement
= connection.prepareStatement(sql);
preparedStatement
.setString(
1
, firstName);
preparedStatement
.setString(
2
, lastName);
if
(file !=
null
) {
// Fetches the input stream
// of the upload file for
// the blob column
preparedStatement.setBlob(
3
, file);
}
// Sends the statement to
// the database server
row = preparedStatement
.executeUpdate();
}
catch
(SQLException e) {
System.out.println(e.getMessage());
}
return
row;
}
// As Submit button is hit from
// the Web Page, request is made
// to this Servlet and
// doPost method is invoked.
protected
void
doPost(
HttpServletRequest request,
HttpServletResponse response)
throws
ServletException, IOException
{
// Getting the parametes from web page
String firstName
= request.getParameter(
"firstName"
);
String lastName
= request.getParameter(
"lastName"
);
// Input stream of the upload file
InputStream inputStream =
null
;
String message =
null
;
// Obtains the upload file
// part in this multipart request
Part filePart
= request.getPart(
"photo"
);
if
(filePart !=
null
) {
// Prints out some information
// for debugging
System.out.println(
filePart.getName());
System.out.println(
filePart.getSize());
System.out.println(
filePart.getContentType());
// Obtains input stream of the upload file
inputStream
= filePart.getInputStream();
}
// Sends the statement to the
// database server
int
row
= UploadFileDao
.uploadFile(firstName,
lastName,
inputStream);
if
(row >
0
) {
message
=
"File uploaded and "
+
"saved into database"
;
}
System.out.println(message);
}
}
Примечание. Приведенный выше код нельзя запустить в онлайн-среде IDE.
Выход:
- Мы можем просмотреть базу данных после запуска кода, чтобы проверить изображения, загруженные в базу данных, нажав «Открыть значение в редакторе» следующим образом:
- После того, как мы нажмем «Открыть значение в редакторе», появится всплывающее окно, показывающее изображение, которое хранится в базе данных в трех форматах: двоичный формат, текстовый формат и формат изображения.
- Теперь, если мы нажмем на опцию изображения, мы сможем увидеть загруженное изображение.
Вниманию читателя! Не прекращайте учиться сейчас. Ознакомьтесь со всеми важными концепциями Java Foundation и коллекций с помощью курса "Основы Java и Java Collections" по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .