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
- 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 $$
DROP PROCEDURE IF EXISTS `mensajes_app`.`getMensaje` $$
CREATE PROCEDURE `mensajes_app`.`getMensaje`
(IN param_id_mensaje INT, OUT param_mensaje VARCHAR(280))
BEGIN
SELECT 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);
}
}
}
- Resultado en consola
Curso de Java SE Persistencia de Datos
0 Comentarios
para escribir tu comentario