martes, 31 de enero de 2012

Ejecutando Store Procedures en aplicaciones JDBC


Para este ejemplo se necesitan dos elementos, un store procedure de prueba y una clase
de java que ejecute el store procedure.

El store procedure recibe dos parametros de entrada y un parametro de salida, los parametros
de salida se declaran como si fueran parametros de entrada pero con la palabra reservada
OUT (un parametro tambien puede ser de entrada y salida INOUT).

La clase de java ejecuta el store procedure, primero obtiene un objeto ResultSet que es
el resultado de la sentencia RETURN de nuestro store procedure. Posteriormente obtiene
el objeto del parametro de salida OUT.


Store Procedure

CREATE PROCEDURE storeProcedurePrueba ( int_uno INT, int_dos VARCHAR, OUT resultado INT)
RETURNING INTEGER;
BEGIN
  LET resultado = int_uno * int_dos;
  RETURN resultado;
END
END PROCEDURE
DROP PROCEDURE storeProcedurePrueba

Clase Java

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

public class InformixStoreProcedure {

public static void main(String[] args) {
Connection conn = null;
String url = "jdbc:informix-sqli://192.168.0.120:1526/bd:informixserver=server";
String driver = "com.informix.jdbc.IfxDriver";
String user = "informix";
String pass = "informix";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, pass);
System.out.println("Conectado a la base de datos !!!");

//Notar que son tres parametros
String sqlCall = "{call storeProcedurePrueba(?, ?, ?)}";
CallableStatement sp = conn.prepareCall(sqlCall);

sp.setInt(1, 5);
sp.setString(2, "4");
sp.registerOutParameter(3, Types.INTEGER);

ResultSet rs = sp.executeQuery();
while (rs.next()) {
System.out.println(rs.getObject(1));
}

Integer resultado = sp.getInt(3);

System.out.println("Resultado de la ejecucion: " + resultado);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

Referencias

http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.jdbc_pg.doc/jdbc031409727.htm
http://publib.boulder.ibm.com/infocenter/idshelp/v111/index.jsp?topic=/com.ibm.jccids.doc/com.ibm.db2.luw.apdv.java.doc/doc/tjvcscsp.htm