Cómo agregar una imagen a la base de datos MySql usando Servlet y JDBC

El lenguaje de consulta estructurado o SQL es un lenguaje de base de datos estándar que se utiliza para crear, mantener y recuperar datos de bases de datos relacionales como MySQL, Oracle, SQL Server, PostGre, etc. En este artículo, comprenderemos cómo agregar una imagen al Base de datos MYSQL usando servlet.

MYSQL es una base de datos relacional. Base de datos relacional significa que los datos se almacenan y recuperan en forma de relaciones (tablas). Los servlets son los programas Java que se ejecutan en el servidor web o en el servidor de aplicaciones habilitado para Java. Se utilizan para manejar la solicitud obtenida del servidor web, procesar la solicitud, producir la respuesta y luego enviar la respuesta al servidor web. Las propiedades de los servlets son que funcionan en el lado del servidor. Y son capaces de manejar requests complejas obtenidas del servidor web. En este artículo, el IDE de Eclipse se usa para ejecutar el servlet y el banco de trabajo MYSQL se usa para ejecutar la base de datos MYSQL. Se pueden seguir los siguientes pasos para agregar una imagen a la base de datos MYSQL usando servlet y JDBC :

  1. Paso 1: Abra Eclipse IDE y en la esquina superior derecha encontrará 2 iconos. Al pasar el mouse, mostrará JAVA EE y JAVA. Como estaremos trabajando con un proyecto web, elegiremos JAVA EE. Después de seleccionarlo, vaya a Archivo -> Nuevo -> Proyecto web dinámico .

  2. Paso 2: ahora necesitamos copiar y pegar el controlador JDBC para MySQL (Conector – JAR_FILE) en la carpeta lib de la carpeta WEB-INF que está presente en la carpeta WebContent. (Todas las bibliotecas externas para el proyecto deben estar aquí).

  3. Paso 3: Ahora, necesitamos crear una página de inicio que presentará un formulario en el que un usuario puede cargar un archivo de imagen. Podemos crear un archivo JSP y HTML en la carpeta WebContent . Por ejemplo, crearemos AddFile.jsp . Necesitamos actualizar el archivo web.xml también, para actualizar su lista de archivos de bienvenida. Tenemos que agregar AddFile.jsp en la lista de archivos de bienvenida.

    <welcome-file-list>
        <welcome-file>AddFile.jsp</welcome-file>
    </welcome-file-list>
  4. Paso 4: ahora, debemos agregar el código para AddFile.jsp que se creó anteriormente. El código de este archivo es el siguiente:

    <%@ 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. Paso 5: Ahora, crearemos una clase que se usará para establecer la conexión con la base de datos MySql usando JDBC y puede usar esa conexión en cualquier momento en el futuro para reflejar cualquier cosa en la base de datos. Por ejemplo, crearemos la clase «MyConnection.java» y el método estático «getConnection()» para obtener una conexión de la siguiente manera:

    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. Paso 6: Ahora, crearemos una base de datos y una tabla de «usuarios» que almacenará los contenidos pasados ​​desde el formulario HTML. La consulta del mismo es la siguiente:

    CREAR BASE DE DATOS FileUploadDatabase
    CREAR TABLA usuarios (
    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. Paso 7: Ahora, crearemos un Servlet que tomará la solicitud de la página web y realizará toda la lógica comercial y almacenará los contenidos en la base de datos MySql. Por ejemplo, lo llamaremos «serv.java». El siguiente es el código en este servlet:

    // Java program to implement
    // the servlet
    package controllers;
      
    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);
        }
    }

    Nota: El código anterior no se puede ejecutar en el IDE en línea.

Producción:

  • Podemos ver la base de datos después de ejecutar el código para verificar las imágenes cargadas en la base de datos haciendo clic en «Abrir valor en el editor» de la siguiente manera:

  • Después de hacer clic en «Abrir valor en el editor», aparecerá una ventana que muestra la imagen que está almacenada en la base de datos en tres formatos: formato binario, formato de texto y formato de imagen.

  • Ahora, si hacemos clic en la opción de imagen, podremos ver la imagen que está cargada.

Publicación traducida automáticamente

Artículo escrito por Ishil_Tripathi y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *