Aprende Inglés, Programación, AI y Ciberseguridad.

Antes:$249

Currency
$209
Suscríbete

Termina en:

04d

18h

07m

00s

1

Ejecutar Procedimiento Almacenado Mysql desde Java

Es posible invocar procedimientos almacenados posterior a la conexión a la base de datos, haciendo uso de un objeto CallableStatement, pasarle parámetros, ejecutarlo y obtener valores de retorno (para el caso de funciones o si tiene un procedimiento almacenado que tiene valores** in /out** como en Oracle o en este caso Mysql):

  • Tabla de mensajes

ejecproc1.png

  • Procedimiento mysql: El siguiente procedimiento almacenado recibe como parámetro de entrada el código o id del mensaje, y el texto del mensaje asociado al id recibido como parámetro de salida o retorno.
DELIMITER $$

DROPPROCEDUREIFEXISTS`mensajes_app`.`getMensaje` $$
CREATEPROCEDURE`mensajes_app`.`getMensaje` 
   (IN param_id_mensaje  INT, OUT param_mensaje VARCHAR(280))
BEGINSELECT mensaje INTO param_mensaje
   FROM mensajes
   WHERE id_mensaje = param_id_mensaje;
END $$

DELIMITER ;
  • Proceso creado en Mysql

    ejecproc2.png

  • Ejecutar proceso des PHPMYADMIN

    Seleccionar carpeta Rutinas
    ejecproc3.png

    Ingresar un valor para el parámetro código y hacer clic en el botón Continuar
    ejecproc4.png

  • Ver resultados

    ejecproc4.png

  • Código Java

/*
 * Esta clase se utiliza para invocar el procedimiento almacenado de Mysql
 */
package com.desaextremo.mensajes.test;

import com.desaextremo.mensajes.Conexion;
import java.sql.CallableStatement;
import java.sql.Connection;/**
 *
 * @author Desaextremo
 */
public class InvocaProceso {

    public static void main(String[] args) {
        //crea conexion
        Conexion conexion = new Conexion();//se utiliza para ejecutar proceso
        CallableStatement stmt = null;int idMensaje = 1;
        String textoMensaje= null;

        try ( Connection cnx = conexion.get_connection()) {

            System.out.println("Creando sentencia...");//el sql de invocación utiliza la notacion call + nombre proceso + parametros requeridos pro el proceso ? separados por ,
            String sql = "{call getMensaje (?, ?)}";
            stmt = cnx.prepareCall(sql);//Bind IN parameter first, then bind OUT parameter
            
            stmt.setInt(1, idMensaje); // Asigna 1 al ide de mensaje// El segundo parametro es de salida; pero debe registrarse
            stmt.registerOutParameter(2, java.sql.Types.VARCHAR);//Invocar el metodo execute parr ejecutar el procedimiento alamecenado 'getMensaje' y recuperar el resultado System.out.println("Ejecutando el procedimiento almacenado getMensaje...");
            stmt.execute();//Recupera el texto del mensaje y lo imprime en la consola
            textoMensaje = stmt.getString(2);System.out.println("Mensaje con el ID:"
                    + idMensaje + " is " + textoMensaje);//cerrar recursos
            stmt.close();
            cnx.close();;

        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

  • Resultado en consola

    ejecproc6.png
Escribe tu comentario
+ 2