Una procedimiento almacenado es un conjunto de sentencias de SQL que se pueden almacenar en el servidor, de esta forma no es necesario volver a emitir las declaraciones individuales cada vez que las necesitemos, sino que pueden referirse a la rutina almacenada llamándola por su nombre.
Los procedimientos almacenados nos permiten utilizar 3 tipos de parámetros:
En este post veremos un ejemplo de como crear un procedimiento almacenado con parámetros de entrada (IN) desde el administrador de base de datos phpMyAdmin, y finalmente veremos como llamar esta rutina desde código java.
Necesitamos:
Nivel: Intermedio-Avanzado
Paso 1. Base de datos
Crea una base de datos con el nombre de «tutorialjava«, a continuación agrega una tabla «empleado» y unos cuantos datos como se ve a continuación.
-- -- Estructura de tabla para la tabla `empleado` -- CREATE TABLE `empleado` ( `id` int(20) NOT NULL AUTO_INCREMENT PRIMARY KEY, `nombre` varchar(64) NOT NULL, `cargo` varchar(64) NOT NULL, `codcargo` varchar(6) NOT NULL, `salario` decimal(10,2) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Volcado de datos para la tabla `empleado` -- INSERT INTO `empleado` (`id`, `nombre`, `cargo`, `codcargo`, `salario`) VALUES (1, 'Alberto Carlos Huevos', 'Responsable de marketing', 'CMO', '3500.00'), (2, 'Aitor Tilla', 'Director de Recursos Humanos', 'CHRO', '5000.00'), (3, 'Estela Gartija', 'Responsable de marketing', 'CMO', '4200.00'), (4, 'Mirella Baila Sola', 'Director Ejecutivo', 'CEO', '10000.00');
Paso 2. Crear el procedimiento almacenado con parámetros de entrada
Con el phpMyAdmin abierto y tu base de datos seleccionado, ve a la opción «rutinas» y presiona el link «agregar rutina»
En la ventana emergente que aparece, completamos los siguientes datos como se ve en la siguiente imagen.
1.- Le damos un nombre a nuestro procedimiento
2.- Seleccionamos PROCEDURE
3.- Indicamos los parámetros de entrada de la siguiente forma:
4.- Ingresamos el SQL del procedimiento almacenado:
UPDATE empleado SET salario = salario + salario * porcentaje/100 where codcargo=codigo
5.- Opcional. Si deseamos, podemos agregar una descripción al procedimiento almacenado
Para terminar, presionamos el botón [continuar]
El procedimiento se sitúa en el apartado de «rutinas» donde podremos cómodamente editarla, eliminar exportarla o ejecutarla.
De igual forma, en nuestro apartado de base de datos se añade una nueva opción donde podremos ver todas las rutinas que creemos al igual que se hace con las tablas.
Paso 3. Probando nuestro procedimiento almacenado
Para ejecutar el procedimiento almacenado, simplemente debemos presionar el botón «Ejecutar», a continuación completar los parámetros de entrada y presionar el botón [continuar]. Para este ejemplo, modificamos el salario para el Director Ejecutivo o CEO, el cual si recordamos, tenia un salario de 10000, incrementamos este en un 20%.
Paso 4. Procedimiento almacenado desde java
Para realizar la llamada a un procedimiento almacenado con parámetros de entrada desde java, se realiza de la siguiente manera:
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; /** * @see https://www.jc-mouse.net/ * @author mouse */ public class Main { public static void main(String[] args) { Connection connection = conectar("jdbc:mariadb://localhost:3306/TutorialJava", "root", ""); if (connection != null) { try { leer_empleados(connection); //Se prepara llamada a procedimiento System.out.println("> llamada a procedimiento almacenado"); CallableStatement stmt = connection.prepareCall("{call ajustar_salario(?, ?)}"); //ingresando parametros IN stmt.setString(1, "CMO"); stmt.setDouble(2, 20); //llamando al procedimiento System.out.println("> Incremento de salario en 20%"); stmt.execute(); System.out.println("> llamada a procedimiento concluida"); leer_empleados(connection); } catch (SQLException ex) { System.err.println(ex.getMessage()); } } } public static Connection conectar(String url, String user, String pass) { try { Connection connection = DriverManager.getConnection(url, user, pass); System.out.println("> Conectado a la base de datos"); return connection; } catch (SQLException ex) { System.err.println(ex.getMessage()); } return null; } /** * Metodo para leer la lista de empleados */ public static void leer_empleados(Connection conn) throws SQLException { System.out.println("\n Lista de empleados"); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM empleado WHERE codcargo='CMO' "); ResultSet rs = stmt.executeQuery(); while (rs.next()) { int id = rs.getInt("id"); String nombre = rs.getString("nombre"); String cargo = rs.getString("cargo"); double salario = rs.getDouble("salario"); System.out.printf("%s | %s | %s | %.2f\n", id, nombre, cargo, salario); } System.out.println(); } }
En el ejemplo anterior, se esta incrementando en un 20% el salario para los empleados con el cargo de «Responsable de marketing» con código CMO.
Donde ejecutando tenemos:
enjoy!!!
ImageMagick es un software de código abierto multiplataforma que contiene una serie de herramientas para leer, mostrar,[...]
Hola 🙂 en esta post se deja a disposición de la comunidad de programadores que quiera aprender un poquito sobre Factura[...]
Para quienes hayan trabajado con JMF saben que es una librería de Java desarrollada por Sun Microsystems para facilitar[...]
¿Alguna vez tuviste la necesidad de hacer una captura de pantalla de una página web? Si es así, seguramente buscaste y d[...]
Java Help es (o era) una librería para java que permitía añadir ventanas de ayuda HTML a nuestros proyectos, al ser una[...]
¿Qué es un Trait en Laravel? Los Trait son una forma que laravel tiene para reutilizar el código, son similares a las cl[...]