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]
Cuando queremos presentar un programa hecho en java y darle un toque de profesionalidad, a veces no queremos que el clie[...]
En este post vemos una manera de como crear un juego de rompecabezas en java sin el uso de java2d, ademas, las piezas de[...]
Una Prueba Unitaria, es una forma de comprobar que nuestro código, hace lo que se supone debe hacer; es decir, se asegur[...]
En la pagina de Taringa, existe una sección donde se puede ver lo que pasa en ese foro al momento, «Taringa! en vivo» se[...]
La policia, el FBI u otros organismos similares utilizaban a dibujantes para realizar el «retrato hablado» de algún male[...]
En un post anterior conocimos que es y como funciona un parámetro de entrada IN en procedimientos almacenados y lenguaje[...]