Foros del Web » Programación para mayores de 30 ;) » Java »

llamada a porcedimiento almacenado arroja null

Estas en el tema de llamada a porcedimiento almacenado arroja null en el foro de Java en Foros del Web. Saludos t5engo el siguiente procedimineto almacenado: Código HTML: CREATE PROCEDURE SP_BuscarRuc(INOUT vruc CHAR(11)) BEGIN SELECT Ruc FROM Cliente WHERE Ruc=vruc; END Lo que deseo es ...
  #1 (permalink)  
Antiguo 30/05/2011, 17:37
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 10 años, 8 meses
Puntos: 0
llamada a porcedimiento almacenado arroja null

Saludos t5engo el siguiente procedimineto almacenado:
Código HTML:
CREATE PROCEDURE SP_BuscarRuc(INOUT vruc CHAR(11))
BEGIN
 SELECT Ruc FROM Cliente WHERE Ruc=vruc;
END
Lo que deseo es hacer una busqueda creo que simple que busque el ruc en DB si lo encuentra me dira q ya existe sino dejara grabar... pero me arroja null este es mi codigo lo hago en un servlet:

Código HTML:
               String buscar=request.getParameter("Ruc_Dni_Cliente");
               
               Cliente cliente=new Cliente();
               cliente.setRuc_Dni_Cliente(buscar);
            
              try {
                   java.sql.ResultSet result=null;
                   ConectaDB db = new ConectaDB();
                   java.sql.Connection cn = db.getConnection();
                   String ruc_salida=null;

                   java.sql.CallableStatement sp_consulta = cn.prepareCall("{call SP_BuscarRuc(?)}");
                   sp_consulta.registerOutParameter(1, java.sql.Types.CHAR);
                   sp_consulta.execute();
                   
                   ruc_salida=sp_consulta.getString(1);
                   
                   result=(java.sql.ResultSet) sp_consulta.getResultSet();
                   while(result.next()){
                    request.getSession().setAttribute("mensaje",ruc_salida);
                   }
                  
                   sp_consulta.close();
               } catch (Exception e) {
                   request.getSession().setAttribute("mensaje",e);
               }
De antemano gracias por la ayuda y sugerencias para poder mejorar mi codigo gracias...
  #2 (permalink)  
Antiguo 30/05/2011, 22:04
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 14 años
Puntos: 260
Sonrisa Respuesta: llamada a porcedimiento almacenado arroja null

Hola,

Posiblemente,

Cita:
Iniciado por alexander01015 Ver Mensaje
CREATE PROCEDURE SP_BuscarRuc(INOUT vruc CHAR(11))
BEGIN
SELECT Ruc FROM Cliente WHERE Ruc=vruc;
END
Supongo que estas usando @vruc.

Cita:
Iniciado por alexander01015 Ver Mensaje
Código:
...
                   java.sql.CallableStatement sp_consulta = cn.prepareCall("{call SP_BuscarRuc(?)}");
                   sp_consulta.registerOutParameter(1, java.sql.Types.CHAR);
                   //¿Y el valor del parámetro?
                   sp_consulta.setString("vruc", 1000);
                   sp_consulta.execute();
Estás haciendo un SELECT con un valor de entrada y salida (INOUT), pero lo estás usando en el WHERE, por lo que tiene que tener un valor en el momento de entrada. Y al final no le estás asignando nada, para asignarle algo tendrías que ponerlo en la lista de campos.

SELECT @vruc = Ruc FROM Cliente WHERE Ruc = @vruc

¿Pero que sucedería? Creo que si no lo encuentra deja el mismo valor en vruc.

SELECT @total = COUNT(Ruc) FROM Cliente WHERE Ruc = @vruc

Aunque tendría que usar otra variable INT de salida, porque vruc es CHAR.

Saludos,

Última edición por HackmanC; 30/05/2011 a las 22:09
  #3 (permalink)  
Antiguo 31/05/2011, 11:12
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: llamada a porcedimiento almacenado arroja null

Gracis HackmanC por la respuesta... Pero sucede lo que me dices casi al final que si no lo encuentra deja el mismo valor .. Por favor explicame un poco mas como hago para evitar eso...
Código HTML:
Ver original
  1. String buscar=request.getParameter("Ruc");
  2.                
  3.                Cliente cliente=new Cliente();
  4.                cliente.setRuc(buscar);
  5.            
  6.               try {
  7.                    java.sql.ResultSet result=null;
  8.                    ConectaDB db = new ConectaDB();
  9.                    java.sql.Connection cn = db.getConnection();
  10.                    String ruc_salida=null;
  11.  
  12.                    java.sql.CallableStatement sp_consulta = cn.prepareCall("{call SP_BuscarRuc(?)}");
  13.  
  14.                    sp_consulta.registerOutParameter(1, java.sql.Types.CHAR);
  15.                    sp_consulta.setString("vruc",buscar);//aca creo que es asi el parametro 1 es del procedimiento almacenado y el 2 es valor a comparar verdad???
  16.                    
  17.                    sp_consulta.execute();
  18.                    
  19.                    ruc_salida=sp_consulta.getString(1);
  20.                    
  21.                    result=(java.sql.ResultSet) sp_consulta.getResultSet();
  22.                    while(result.next()){
  23.                     request.getSession().setAttribute("mensaje",ruc_salida);
  24.                    }
  25.                  
  26.                    sp_consulta.close();
  27.                } catch (Exception e) {
  28.                    request.getSession().setAttribute("mensaje",e);
  29.                }
  #4 (permalink)  
Antiguo 31/05/2011, 20:15
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 14 años
Puntos: 260
Sonrisa Respuesta: llamada a porcedimiento almacenado arroja null

Hola,

Cita:
Iniciado por alexander01015 Ver Mensaje
Gracis HackmanC por la respuesta... Pero sucede lo que me dices casi al final que si no lo encuentra deja el mismo valor .. Por favor explicame un poco mas como hago para evitar eso...
Eso se aplica en otro contexto, porque ni siquiera estas usando el parámetro INOUT.
Pero ... yo lo haría así :

Código MySQL:
Ver original
  1. DROP PROCEDURE IF EXISTS `tabla1`.`sp_buscar_05`$$
  2. CREATE PROCEDURE `tabla1`.`sp_buscar_05` (
  3.   IN q_codest CHAR(10)
  4.   select codest from cliente where codest = q_codest;
  5. $$
Código Java:
Ver original
  1. public boolean Exist(String q_codest) throws SQLException {
  2.         CallableStatement callableStatement = getConnection().prepareCall("{call sp_buscar_05(?)}");
  3.         callableStatement.setString("q_codest", q_codest);
  4.         ResultSet result = callableStatement.executeQuery();
  5.         if (result.next())
  6.           request.getSession().setAttribute("mensaje", result.getString("codest"));
  7.         else
  8.           // no lo encontro
  9.     }

Edit: Corregir un 'error' en el código, que pedía q_codest en lugar de codest que era el valor devuelto por la consulta. Pero supongo que no importa porque nadie más se tomó la molestia en escribirlo mejor o corregir el error, eso en base a lo que leí en otro hilo sobre 'el código de alguien más'.

Saludos,

Última edición por HackmanC; 01/06/2011 a las 20:55 Razón: cambiar codest por q_codest en el getter

Etiquetas: llamada, null, almacenar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:22.