Sei sulla pagina 1di 3

En este tuto realizaremos la implementacin y ejecucin 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? Java Un DBMS (Gestor de Base de Datos) con MySQL Conocimientos bsicos de SQL IDE Netbeans 6.9 o Superior Conector MySQL JDBC (mysql-connector-java-5.1.6-bin.jar o superior) Comencemos. 1. Lo primero que necesitamos es una base de datos, debes crear uno en MySQL y agregarle una tabla, la siguiente: 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 ; 2. Ahora crearemos un procedimiento almacenado, la accin de este sera: registrar a un jugador dado su nombre y ao de nacimiento, se calculara su edad y dependiendo de esta, se registrara en la categora correspondiente, de 18 a 20 aos en la categora Sub 20 , de 21 a 23 aos en la categora Sub 22, si el rango de edad no entra en ninguno de los anteriores, se registrara al jugador como Sin categora. 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 , ' aos registrado en categoria [' , categoria, ']' ); END $ DELIMITER ; Si deseas probar el procedimiento en MySQL puedes llamarlo de la siguiente forma CALL registrar_jugador('Lani Hall',1990, @resultado); select @resultado; 3. Ahora nos dirigemos a Netbeans. Crea un nuevo proyecto jcProc, no utilizaremos interfaz grfica para no complicar el tutorial, aade la libreria *.jar de conexion JDBC y crea una nueva clase database.java, el cdigo para esta clase es: package jcproc;

import java.sql.*; /** * @web http://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

} Esta clase esta dividida en dos partes, el constructor de la clase, donde realizamos la conexin a la base de datos y un metodo al que llamamos procedure, este metodo es el que nos permite ejecutar el procedimiento almacenado en MySQL desde Java, esta comentado para que se pueda entender ms facilmente. 4. para terminar implementados esta clase en el main.java, el cdigo es: package jcproc; /** * @web http://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); } } Finalmente ejecuta el proyecto en netbeans, debes tener como resultado: Jugador John Winston Lennon de 13 aos registrado en categoria [Sin categoria] Jugador James Paul McCartney de 22 aos registrado en categoria [Sub 22] Jugador Ned Flanders de 18 aos registrado en categoria [Sub 20]