Как добавить изображение в базу данных MySql с помощью сервлета и JDBC

Опубликовано: 15 Августа, 2021

Язык структурированных запросов или SQL - это стандартный язык баз данных, который используется для создания, обслуживания и извлечения данных из реляционных баз данных, таких как MySQL, Oracle, SQL Server, PostGre и т. Д. В этой статье мы поймем, как добавить изображение в База данных MYSQL с использованием сервлета.

MYSQL - это реляционная база данных. Реляционная база данных означает, что данные хранятся, а также извлекаются в виде отношений (таблиц). Сервлеты - это программы Java, которые выполняются на веб-сервере или сервере приложений с поддержкой Java. Они используются для обработки запроса, полученного с веб-сервера, обработки запроса, создания ответа, а затем отправки ответа обратно на веб-сервер. Свойства сервлетов заключаются в том, что они работают на стороне сервера. И они способны обрабатывать сложные запросы, полученные с веб-сервера. В этой статье Eclipse IDE используется для выполнения сервлета, а рабочая среда MYSQL используется для запуска базы данных MYSQL. Чтобы добавить изображение в базу данных MYSQL с помощью сервлета и JDBC, можно выполнить следующие шаги:

  1. Шаг 1. Откройте Eclipse IDE и в правом верхнем углу вы найдете 2 значка. При наведении курсора отобразятся JAVA EE и JAVA. Поскольку мы будем работать с веб-проектом, мы выберем JAVA EE. После его выбора перейдите в Файл -> Создать -> Динамический веб-проект .

  2. Шаг 2: Теперь нам нужно скопировать и вставить драйвер JDBC для MySQL (коннектор - JAR_FILE) в папку lib папки WEB-INF, которая находится в папке WebContent. (Здесь должны быть все внешние библиотеки для проекта).

  3. Шаг 3: Теперь нам нужно создать домашнюю страницу, которая будет представлять форму, в которую пользователь может загрузить файл изображения. Мы можем создать как JSP, так и HTML файл в папке WebContent. Например, мы создадим AddFile.jsp . Нам также необходимо обновить файл web.xml, чтобы обновить его список приветственных файлов. Мы должны добавить AddFile.jsp в список приветственных файлов.




    < welcome-file-list >
    < welcome-file >AddFile.jsp</ welcome-file >
    </ welcome-file-list >
  4. Шаг 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. Шаг 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. Шаг 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. Шаг 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 и многому другому, см. Полный курс подготовки к собеседованию .