Как добавить изображение в базу данных 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><metacharset="ISO-8859-1"><title>Add File Here</title></head><body><formmethod="post"action="serv"enctype="multipart/form-data"><div><label>First Name:</label><inputtype="text"name="firstName"size="50"/></div><div><label>Last Name:</label><inputtype="text"name="lastName"size="50"/></div><div><label>Profile Photo: </label><inputtype="file"name="photo"size="50"/></div><inputtype="submit"value="Save"></form></body></html> - Шаг 5: Теперь мы создадим класс, который будет использоваться для установления соединения с базой данных MySql с помощью JDBC и может использовать это соединение в любое время в будущем, чтобы отражать что-либо в базе данных. Например, мы создадим класс MyConnection.java и статический метод getConnection (), чтобы получить соединение следующим образом:
importjava.sql.*;publicclassMyConnection {publicstaticConnection 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(newcom.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 machineand "3306" is the port numberand "FileUploadDatabase" is the nameof the database.2. UserName: "root", which is setwhile creating a database server inMySql Workbench.3. Password: "root"*/returncon;}catch(SQLException e) {System.out.println(e.getMessage());}returnnull;}} - Шаг 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 servletcontrollers;packageimportjava.io.IOException;importjava.io.InputStream;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.annotation.MultipartConfig;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.Part;importDao.UploadFileDao;importconnection.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)publicclassservextendsHttpServlet {// auto generatedprivatestaticfinallongserialVersionUID = 1L;publicserv(){super();}// This Method takes in All the information// required and is used to store in the// MySql Database.publicintuploadFile(String firstName,String lastName,InputStream file){String SQL="INSERT INTO users "+"(first_name, last_name, "+"photo) values (?, ?, ?)";introw =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 columnpreparedStatement.setBlob(3, file);}// Sends the statement to// the database serverrow = preparedStatement.executeUpdate();}catch(SQLException e) {System.out.println(e.getMessage());}returnrow;}// As Submit button is hit from// the Web Page, request is made// to this Servlet and// doPost method is invoked.protectedvoiddoPost(HttpServletRequest request,HttpServletResponse response)throwsServletException, IOException{// Getting the parametes from web pageString firstName= request.getParameter("firstName");String lastName= request.getParameter("lastName");// Input stream of the upload fileInputStream inputStream =null;String message =null;// Obtains the upload file// part in this multipart requestPart filePart= request.getPart("photo");if(filePart !=null) {// Prints out some information// for debuggingSystem.out.println(filePart.getName());System.out.println(filePart.getSize());System.out.println(filePart.getContentType());// Obtains input stream of the upload fileinputStream= filePart.getInputStream();}// Sends the statement to the// database serverintrow= 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 и многому другому, см. Полный курс подготовки к собеседованию .