Saúl García Díaz

Consultor tecnológico de desarrollo de proyectos informáticos.

Charla sobre LiquiBase

Charla sobre Alfresco Community Edition

Puedes encontrarme en Autentia: Ofrecemos servicios de soporte a desarrollo, factoría y formación

Somos expertos en Java/JEE

Ver todos los tutoriales del autor

Fecha de publicación del tutorial: 2011-08-04

Tutorial visitado 23.028 veces Descargar en PDF
Usando CallableStatements para ejecutar procedimientos almacenados

Usando CallableStatements para ejecutar procedimientos almacenados

0. Índice de contenidos.

1. Introducción

JDBC (Java Database Connectivity) es un API que nos proporciona una serie de interfaces para poder acceder a cualquier base de datos que la implemente. El API nos abstrae de los detalles específicos de cada base de datos permitiendonos conectar practicamente de igual manera independientemente de la bases de datos.

De entre todas las interfaces que nos proporciona el API nos centraremos en la interfaz CallableStatements que nos permitirá ejecutar procedimientos almacenados. Esto puede venir bien sobre todo cuando estamos trabajando en proyectos en los que por distintos motivos gran parte del modelo de negocio se encuentra en base de datos y se quiere por ejemplo explotar ese negocio desde una nueva aplicación desarrollada en otra tecnología, Java concretamente.

Para el tutorial de hoy se ha utilizado MySQL con lo que necesitaremos el driver correspondiente Conector/J que actualmente esta en la versión 5.1 . Normalmente es cada base de datos la que pone a nuestra disposición el driver para JDBC que permitirá relizar la conexión de manera sencilla.

2. Entorno

El tutorial está escrito usando el siguiente entorno:

  • Hardware : Portátil Mac Book Pro 15" (2,6 Ghz Intel Core i7, 4 GB DDR3).
  • Sistema Operativo:Mac OS X Snow Leopard 10.6.7
  • Eclipse Helios
  • MySQL 5.1.35
  • Java 1.6

3. Interfaz CallableStatements

Lo primero de todo cometaros que podemos obtener más información acerca de la síntaxis de los procedimientos almacenados de MySQL desde el siquiente enlace Procedimientos almacenados y funciones.

A partr de MySQL 5.0 cuando se usa con Conector/J 3.1.1 o posterior la interfaz CallableStatements esta completamente implementada excepto el metodo getParameterMetaData().

Partimos de la situación inicial de un procedimiento almacenado que retorna el valor de un inOutParam incrementado en 1 y la cadena de caracteres pasada via inputParam como Resultset:

Para usar el procedimiento almacenado demoSP seguimos los siguientes pasos:

  • 1. Preparamos el callable statement usando Connection.prepareCall().

    Tened siempre en cuenta que hemos de usar la sintaxis de escape de JDBC siendo obligatorios los paréntesis que rodean los parámetros.

    Nota: Connection.prepareCall() es un método costoso, debido a la petición de metadatos que hace el driver para suportar los parámetros de salida.
    Por razones de rendimiento, intentad minimizar llamadas innecesarias a Connection.prepareCall() reusando instancias de CallableStatement.

  • 2. Registramos los parámetros de salida (si existen)

    Para recibir los valores de los parámetros de salida (parámetros especificados como OUT o INOUT cuando se crea el procedimiento), JDBC requiere que esten especificados antes de la ejecución del statement usando los distinitos modos de registrar un parámetro con el método registerOutputParameter():

  • 3. Especificamos los parámetros de entrada (si existen)

    Los parámtros de entrada y de entrada/salida se especifican como en los objetos PreparedStatement . Sin embargo, CallableStatement también soporta especificar los parámetros por nombre:

  • 4. Ejecutamos CallableStatement , y recibimos cualquier conjunto de resultados o parámetros de salida.

    Mientras CallableStatement soporta llamar a cualquiera de los métodos de ejecución de Statement ( executeUpdate(), executeQuery() o execute() ), el método más flexible es execute(), ya que no necesita saber de antemano si el procedimiento almacenado retorna un conjunto de resultados:

4. Ejemplo.

A continuación os muestro un simple ejemplo completo para ver un poquito lo que hemos explicado anteriormente. Será necesario añadir al buildPath el jar correspondiente del driver de MySQL.
Los fuentes aqui.

Por un lado tenemos una clase de apoyo que nos ayuda a establecer la conexión con la base de datos:

y por otro lado la clase que realiza la llamada al procedimiento almacenado:

Obteniendo como resultado:
Cadena de caractéres pasada como parametro de entrada=abcdefg
Parametro de salida incrementado =1

5. Referencias.

6. Conclusiones.

Como hemos visto la interfaz CallableStatements nos permite ejecutar procedimientos almacenados e interactuar con el resultado de una manera rápida y sencilla posicionandose como una buena opción a la hora de trabajar con procedimientos almacenados. Espero que les sirva de utilidad, hasta próximos tutoriales.

Un saludo.

Saúl

sgdiaz@autentia.com

A continuación puedes evaluarlo:

Regístrate para evaluarlo

Por favor, vota +1 o compártelo si te pareció interesante

Share |
Anímate y coméntanos lo que pienses sobre este TUTORIAL: