post icon

Capturar Output de los Procedimientos Almacenados de SQL Server con Java

A parte de un conjunto de datos que puede devolver un Stored Procedure en SQL Server, también podemos hacer que ellos devuelvan uno o varios valores escalares, un caso tipico es cuando insertamos un registro y la tabla tenia una PK Identity, si queremos recuperar esa clave podemos usar este mecanismo, aunque no necesariamente se reduce a esa posibilidad, con un poco de imaginación podemos darle usos en otras situaciones. El ejemplo que muestro esta construido con SQL Server, pero es funcional con otros motores que manejan el retorno de valores escalares en sus procedimientos almacenados..

1
2
3
4
5
6
7
8
9
10
11
CREATE PROCEDURE InsCliente
   @IdCliente INT OUTPUT,
   @Nombre VARCHAR(25),
   @Ruc VARCHAR(25)
AS
BEGIN
   -- Insertamos un registro
   INSERT INTO Cliente VALUES (@Nombre, @Ruc);
   -- Recuperamos el Id que se genero
   SELECT @IdCliente = @@Identity;
END

Tomando en cuenta este procedimiento que tiene demasiados atributos para cliente 😛 ¿Cómo hacemos para capturar ese valor sin utilizar un ResultSet (Esto funcionaría pero no sería elegante), podemos hacerlo del siguiente modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void CrearCliente(java.sql.Connection con) {
   try {
      // instanciamos el objeto callable
      CallableStatement cstmt = con.prepareCall("{call dbo.InsCliente(?, ?, ?)}");
      // seteamos los parametros de entrada
      cstmt.setString(2, "Jose Morales");
      cstmt.setString(3, "DKFF4543-2");
      // registramos el parametro de retorno (si fueran mas, repetimos la linea cambiando el nro de orden del parametro)
      cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
      // ejecutamos
      cstmt.execute();
      // mostramos al usuario el codigo creado
      System.out.println("Se creo el Cliente con Codigo: " + cstmt.getInt(1));
   }
   catch (Exception e) {
      e.printStackTrace();
   }
}

Comentarios desde Facebook:

  1. avatar
    Luis Palomino PERU Google Chrome Windows
    22 julio 2011 at 16:46 #

    quiero compartir un ejemplo cuando el procedimiento devuelve valores:
    connMY = DBConexion.conectar(“localhost”, “farmacia”, “farmacia”, “farmacia”);
    connMY.setAutoCommit(false);
    CallableStatement prcLogin = connMY.prepareCall(“{ call pa_login(?,?,?) }”);
    prcLogin.setString(1,”100″);
    prcLogin.setString(2,”100″);
    prcLogin.registerOutParameter(3, java.sql.Types.INTEGER);
    prcLogin.execute();
    System.out.println(“el usuario con codigo?” + prcLogin.getInt(3));

  2. avatar
    rene UNITED STATES Internet Explorer Windows
    23 junio 2011 at 13:53 #

    Como llamar a un procedure en sql server 2005 dependiendo de lo que esta seleccionado en jcombobox????????????,gracias

    PD:¿como envio mi codigo java?

  3. avatar
    Gray CHILE Google Chrome Windows
    11 noviembre 2010 at 22:40 #

    wooo muchas gracias men, en realidad me ayudaste demasiado =D!!!!

    si esto fuera con votos… tendrias mi +1000 =D!!!

  4. avatar
    GeekZero PARAGUAY Google Chrome Windows
    2 julio 2010 at 10:11 #

    @Dracox3 y @JC que bueno que les haya servido, que dejen sus comentarios me alientan a seguir escribiendo 🙂

  5. avatar
    JC PARAGUAY Mozilla Firefox Windows
    2 julio 2010 at 08:40 #

    Muchisimas gracias! simple y claro, sigue posteando….

  6. avatar
    Dracox3 ARGENTINA Mozilla Firefox Windows
    9 junio 2010 at 09:01 #

    Gracias… me sacaste un dolor de cabeza!!!!

Trackbacks/Pingbacks

  1. Tweets that mention Capturar Output de los Procedimientos Almacenados de SQL Server con Java | DevTroce.com -- Topsy.com - 31 mayo 2010

    […] This post was mentioned on Twitter by Diogenes Caraballo, DevTroce. DevTroce said: Capturar Output de los Procedimientos Almacenados de #SQL Server con #Java: A parte de un… http://goo.gl/fb/TxiOK […]

Responder