Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Procedimientos Almacenados: Parámetros INOUT

Procedimientos Almacenados: Parámetros INOUT

Por jc mouse martes, mayo 14, 2019

En post anteriores vimos lo que son los parámetros IN y los parámetros OUT pero existe otro tipo de parámetro que es la combinación de ambos y es el parámetro INOUT.

Parámetros INOUT

El parámetro INOUT es un parámetro tanto de entrada como de salida. Esto significa que el programa que lo llama puede pasar el argumento, y el procedimiento almacenado puede modificar el parámetro INOUT y devolver el nuevo valor al programa que lo llama.

El ejemplo para este post consistirá en un procedimiento que use un parámetro INOUT para ingresar el ID de un empleado y según este exista o no, retornara en el mismo parámetro el nombre y cargo del empleado o un mensaje advirtiendo que el empleado buscado no existe. Un ejemplo trivial pero que sirve para apreciar como funciona este tipo de parámetro.

¿Que necesitamos?

  • Utilizamos la misma base de datos de los post anteriores
  • XAMPP o similares
  • Netbeans o Eclipse
  • Conector JDBC MariaDB

Procedimiento almacenado

Valiendonos del asistente gráfico de phpmyadmin creamos el siguiente procedimiento:

store procedure

donde:

  1. Nombre de rutina: obtenerEmpleado
  2. Tipo: PROCEDURE
  3. Tipo: INOUT
  4. Nombre para el parametro: valor
  5. Tipo y longitud: VARCHAR(64)
  6. SQL

Una vez creado el procedimiento, realizamos unas pruebas para comprobar que funciona como queremos.

resultados rutina

INOUT en java

Ahora implementamos el código para llamar al procedimiento desde java:

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
/**
 * @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 {     
                System.out.println("> Se prepara llamada a procedimiento almacenado");
                CallableStatement stmt = connection.prepareCall("{call obtenerEmpleado(?)}");
                //ingresando parametro INOUT de tipo VARCHAR
                stmt.registerOutParameter(1, Types.VARCHAR);
                stmt.setString(1, "3");
                                
                System.out.println("> Ejecutando procedimiento");
                stmt.execute();
                System.out.println("> Ejecucion terminada");

                //Se obtiene el valor devuelto por el procedimiento
                String valor = stmt.getString(1);
                System.out.println("\n   Valor retornado: " + valor);
                
            } 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;
    }
}

Y ejecutando obtenemos lo siguiente:

INOUT java ejemplo

enjoy!

Tags

Artículos similares

Sumar 2 numeros

Una vez que terminamos el obligatorio 🙂 «Hola mundo«, podemos crear aplicaciones un tanto más elaboradas, pero para nada[...]

Leer y Escribir registros en archivo de texto

A veces se necesita utilizar archivos de texto plano como contenedor de registros como si de una base de datos se tratar[...]

Cascadia Code: la nueva fuente OpenSource de Microsoft

Microsoft acaba de lanzar Cascadia Code una fuente monoespaciada enfocada en proporcionar una mejor experiencia en conso[...]

Resolución de pantalla con LibGDX

En este tutorial, veremos un poco más de lo que son las texturas en libGDX y dos maneras de añadirlas a nuestros juegos,[...]

Empaquetado de texturas en LibGDX

Continuando con los tutoriales sobre LibGDX (Librería para el desarrollo de videojuegos), en esta ocasión veremos como e[...]

Autenticación en php con MySql y POO

Autenticación en una pagina web es el proceso de confirmar que un usuario es quien dice ser, asi de simple. En el siguie[...]