En este tuto realizaremos la implementación y ejecución de procedimientos almacenados de MySQL en Java, si quieres darle un repaso a lo que son los «procedimientos en MySQL» te invito a que visites ese post.
¿Que necesitamos?
CREATE TABLE jugador ( id int(2) NOT NULL auto_increment, nombre varchar(60) NOT NULL, anio_nac int(4) default NULL, categoria varchar(20) default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;
DELIMITER $ CREATE PROCEDURE registrar_jugador(IN nombre varchar(60) , IN anio_nac INT, OUT resultado TEXT) BEGIN DECLARE edad int ; DECLARE categoria char(20) ; -- obtiene la edad del jugador SET edad = ( DATE_FORMAT(now() ,'%Y') - anio_nac ); -- dependiendo de la edad se registra al jugador en diferentes categorias CASE WHEN edad=18 OR edad=19 OR edad=20 THEN SET categoria = 'Sub 20' ; WHEN edad=21 OR edad=22 OR edad=23 THEN SET categoria = 'Sub 22' ; ELSE SET categoria = 'Sin categoria'; END CASE ; INSERT INTO jugador(nombre, anio_nac, categoria) VALUES( nombre, anio_nac , categoria ); -- Cuando se termina de registrar al jugador, se devuelve una respuesta en formato de texto SET resultado = CONCAT( 'Jugador ', nombre, ' de ' , edad , ' años registrado en categoria [' , categoria, ']' ); END $ DELIMITER ;
CALL registrar_jugador('Lani Hall',1990, @resultado); select @resultado;
package jcproc; import java.sql.*; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class database { /* DATOS PARA LA CONEXION */ private String bd = "BASE_DE_DATOS"; private String login = "USUARIO"; private String password = "PASSWORD"; private String url = "jdbc:mysql://localhost/"+bd; private Connection conn = null; //___________________________________________________________________________________ Soy una barra separadora :) //Constructor de la clase que se conecta a la base de datos una vez que se crea la instancia public database(){ try{ Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url,login,password); }catch(SQLException e){ System.out.println(e); }catch(ClassNotFoundException e){ System.out.println(e); } } //___________________________________________________________________________________ Soy una barra separadora :) /* FUNCION PARA LLAMAR A UN PROCEDIMIENTO ALMACENADO * INPUT: * nombre = tipo string * anio_nacimiento = tipo entero * OUTPUT: * String */ public String procedure(String nombre, int anio_nacimiento) { String resultado=null; try { // se crea instancia a procedimiento, los parametros de entrada y salida se simbolizan con el signo ? CallableStatement proc = conn.prepareCall(" CALL registrar_jugador(?,?,?) "); //se cargan los parametros de entrada proc.setString("nombre", nombre);//Tipo String proc.setInt("anio_nac", anio_nacimiento);//Tipo entero // parametros de salida proc.registerOutParameter("resultado", Types.VARCHAR);//Tipo String // Se ejecuta el procedimiento almacenado proc.execute(); // devuelve el valor del parametro de salida del procedimiento resultado = proc.getString("resultado"); } catch (Exception e) { System.out.println(e); } return resultado; } //___________________________________________________________________________________ Soy una barra separadora :) }
package jcproc; /** * @web https://www.jc-mouse.net/ * @author Mouse */ public class Main { public static void main(String[] args) { database db = new database(); String r = db.procedure("John Winston Lennon", 1999); System.out.println(r); r = db.procedure("James Paul McCartney", 1990); System.out.println(r); r = db.procedure("Ned Flanders", 1994); System.out.println(r); } }
Jugador John Winston Lennon de 13 años registrado en categoria [Sin categoria] Jugador James Paul McCartney de 22 años registrado en categoria [Sub 22] Jugador Ned Flanders de 18 años registrado en categoria [Sub 20]
Esta aplicacion permite escalar una imagen desde java sin perder las proporciones de la misma, utiliza SCALE_AREA_AVERAG[...]
En ocasiones el limite máximo de importación de base de datos que ofrece PhpMyAdmin (2MB) no es suficiente para lo que q[...]
Cuando se trabaja con base de datos, estos datos son dinámicos, cambian con el tiempo y es necesario que esos cambios se[...]
Un BLOB en SQL es un tipo incorporado que almacena un Objeto Binario Grande como un valor de columna en una fila de una[...]
Un archivo README.md es un archivo de texto escrito en el lenguaje de marcado Markdown, este se encuentra en la raíz de[...]
El control de paginación de JavaFX (Pagination) se usa para navegar a través de varias paginas de contenido divididas en[...]