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):
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
Ejecutar proceso des PHPMYADMIN
Seleccionar carpeta Rutinas
Ingresar un valor para el parámetro código y hacer clic en el botón Continuar
Ver resultados
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);
}
}
}