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

llamar a funcion creada en musql desde java

Estas en el tema de llamar a funcion creada en musql desde java en el foro de Java en Foros del Web. Saludos a los miembros del foro... Tengo la siguiente funcion lo que hace es devolverme un numero: Código HTML: CREATE function NumFilasActividad(fase CHAR(3)) returns INTEGER(3) ...
  #1 (permalink)  
Antiguo 02/06/2011, 11:49
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 0
llamar a funcion creada en musql desde java

Saludos a los miembros del foro... Tengo la siguiente funcion lo que hace es devolverme un numero:
Código HTML:
CREATE function NumFilasActividad(fase CHAR(3)) returns INTEGER(3)
BEGIN
	DECLARE num INTEGER(3);
	SELECT COUNT(*) INTO num FROM T_Actividad WHERE Id_Fase=fase;
	return num;
END
Ahora como lo invoco desde java a esa funcion no tengo ni idea de como hacerlo.. de antemano les agradesco por su ayuda..
  #2 (permalink)  
Antiguo 02/06/2011, 13:37
 
Fecha de Ingreso: enero-2011
Mensajes: 47
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: llamar a funcion creada en musql desde java

Yo tengo estas funciones

Código Java:
Ver original
  1. /**
  2.      * @see Object[] parameters = new Object[]{new Integer(0),new
  3.      *      String("CC_TMP_OMISMOR")}; Integer i =
  4.      *      (Integer)executeFunction("{ ? = call p_siit_functions.getNextVal(?) }"
  5.      *      ,parameters);
  6.      * @param cadena
  7.      *            sql y arreglo de parametros
  8.      * @return nothing,
  9.      */
  10. public static Object executeFunction(String sql,
  11.             Object[] params,DataSource dataSource) throws Exception {
  12.                 Connection conn = null;
  13.                 CallableStatement cstmt = null;
  14.                 try {                  
  15.                         Object outPut;
  16.                         conn = dataSource.getConnection();              
  17.                         cstmt = conn.prepareCall(sql);
  18.                
  19.                         if (params != null) {
  20.                                 for (int i = 0; i < params.length; i++) {
  21.                                         Object param = params[i];
  22.                                         if (i == 0) {
  23.                                           cstmt.registerOutParameter(1, resolveType(param));
  24.                                         } else {
  25.                                        
  26.                                           cstmt.setObject(i + 1, param, resolveType(param));
  27.                                         }
  28.                                 }
  29.                         }              
  30.                         cstmt.execute();        
  31.                         outPut = cstmt.getObject(1);
  32.                                                
  33.                         return outPut;
  34.                 } catch (Exception ex) {
  35.                         throw new Exception(ex);
  36.                 }finally{
  37.                         if(cstmt!=null){
  38.                                 cstmt.close();
  39.                                 cstmt = null;
  40.                         }                      
  41.                         if(conn!=null){
  42.                                 conn.close();
  43.                                 conn = null;
  44.                         }              
  45.                 }
  46. }
  47.  
  48.  
  49. private static int resolveType(Object param) {
  50.                 int sqlType = Types.VARCHAR;
  51.                 if (param == null) {
  52.                     sqlType = Types.NULL;
  53.                 } else {
  54.                     Class paramClass = param.getClass();
  55.                     if (param instanceof String) {
  56.                         sqlType = Types.VARCHAR;
  57.                     } else if (paramClass.equals(double.class) ||
  58.                                param instanceof Double) {
  59.                         sqlType = Types.DOUBLE;
  60.                     } else if (param instanceof BigDecimal) {
  61.                         sqlType = Types.NUMERIC;
  62.                     } else if (param instanceof Calendar ||
  63.                                param instanceof java.sql.Date) {
  64.                         sqlType = Types.DATE;
  65.                     } else if (paramClass.equals(int.class) ||
  66.                                param instanceof Integer) {
  67.                         sqlType = Types.INTEGER;
  68.                     } else if (paramClass.equals(long.class) ||
  69.                                param instanceof Long) {
  70.                         sqlType = Types.BIGINT;
  71.                     } else if (paramClass.equals(float.class) ||
  72.                                param instanceof Float) {
  73.                         sqlType = Types.REAL;
  74.  
  75.                     }
  76.                 }
  77.                 return sqlType;
  78. }

Esta hecho para correr con una base de datos Oracle, pero ya lo he probado en MySQL con un proyecto personal y me corrio muy bien, espero te sirva.
  #3 (permalink)  
Antiguo 02/06/2011, 14:25
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: llamar a funcion creada en musql desde java

Hola hkadejo hice lo siguiente aunque igual le falta algo porq me sale cero es como si no ejecutara pienso que le falta algo q estoy pasando por alto haber si hechas una mano
Código HTML:
Ver original
  1. static public String CountFilas(String filas) {
  2.        String mensaje=null;
  3.        int numero=0;
  4.         try {
  5.             ConectaDB db = new ConectaDB();
  6.             Connection cn = db.getConnection();
  7.  
  8.             if (cn == null) {
  9.                 mensaje = "No hay conexión a la base de datos...!";
  10.             } else {
  11.                 Statement st = cn.createStatement();
  12.          
  13.                 CallableStatement sp_CountFilas=cn.prepareCall("{call NumFilasActividad(?)}");
  14.                
  15.                 sp_CountFilas.registerOutParameter(1,Types.CHAR);
  16.                
  17.                 sp_CountFilas.execute();
  18.                
  19.                 numero=sp_CountFilas.getInt(1);
  20.                
  21.                 st.close();
  22.                 cn.close();
  23.             }
  24.         } catch (SQLException e) {
  25.             mensaje=null;
  26.         } catch (Exception e) {
  27.             mensaje=null;
  28.         }
  29.        
  30.  
  31.         return String.valueOf(numero);
  32.              
  33.     }
Te lo agradeceria mucho....
  #4 (permalink)  
Antiguo 02/06/2011, 15:34
 
Fecha de Ingreso: enero-2011
Mensajes: 47
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: llamar a funcion creada en musql desde java

Cita:
Iniciado por alexander01015 Ver Mensaje
Hola hkadejo hice lo siguiente aunque igual le falta algo porq me sale cero es como si no ejecutara pienso que le falta algo q estoy pasando por alto haber si hechas una mano
Código HTML:
Ver original
  1. static public String CountFilas(String filas) {
  2.        String mensaje=null;
  3.        int numero=0;
  4.         try {
  5.             ConectaDB db = new ConectaDB();
  6.             Connection cn = db.getConnection();
  7.  
  8.             if (cn == null) {
  9.                 mensaje = "No hay conexión a la base de datos...!";
  10.             } else {
  11.                 Statement st = cn.createStatement();
  12.          
  13.                 CallableStatement sp_CountFilas=cn.prepareCall("{call NumFilasActividad(?)}");
  14.                
  15.                 sp_CountFilas.registerOutParameter(1,Types.CHAR);
  16.                
  17.                 sp_CountFilas.execute();
  18.                
  19.                 numero=sp_CountFilas.getInt(1);
  20.                
  21.                 st.close();
  22.                 cn.close();
  23.             }
  24.         } catch (SQLException e) {
  25.             mensaje=null;
  26.         } catch (Exception e) {
  27.             mensaje=null;
  28.         }
  29.        
  30.  
  31.         return String.valueOf(numero);
  32.              
  33.     }
Te lo agradeceria mucho....
Dos cosas que veo dandole un vistazo a tu codigo

1) El string de tu funcion debe ser algo asi: "? = call p_siit_functions.getNextVal(?)" si te fijas hay un primer simbolo de interrogacion que es donde se guardara el parametro de salida, tienes que ponerselo.


2) La siguiente linea
Código Java:
Ver original
  1. sp_CountFilas.registerOutParameter(1,Types.CHAR);

Ahi deberia definir un tipo numerico, no un char...el parametro de salida que registres debe ser congruente con el tipo que devuelve tu funcion.
  #5 (permalink)  
Antiguo 02/06/2011, 16:02
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: llamar a funcion creada en musql desde java

Hola hkadejo hice los cambios pero aun persite me sigue saliendo 0:

Código HTML:
Ver original
  1. static public Integer CountFilas(String filas) {
  2.        String mensaje=null;
  3.        int numero=0;
  4.         try {
  5.             ConectaDB db = new ConectaDB();
  6.             Connection cn = db.getConnection();
  7.  
  8.             if (cn == null) {
  9.                 mensaje = "No hay conexión a la base de datos...!";
  10.             } else {
  11.                 Statement st = cn.createStatement();
  12.          
  13.                 CallableStatement sp_CountFilas=cn.prepareCall("{? = call NumFilasActividad(?)}");
  14.                
  15.                 sp_CountFilas.registerOutParameter(1,Types.INTEGER);
  16.                
  17.                 sp_CountFilas.setString(2, filas);
  18.                                                
  19.                  sp_CountFilas.executeQuery();
  20.                  
  21.                 numero=sp_CountFilas.getInt(1);
  22.                  
  23.                
  24.                 st.close();
  25.                 cn.close();
  26.             }
  27.         } catch (SQLException e) {
  28.             mensaje=null;
  29.         } catch (Exception e) {
  30.             mensaje=null;
  31.         }
  32.        
  33.  
  34.         return numero;
  35.              
  36.     }
Haber hechale otro vistazo... gracias por ayudarme con este problema...
  #6 (permalink)  
Antiguo 03/06/2011, 02:36
 
Fecha de Ingreso: mayo-2011
Mensajes: 79
Antigüedad: 13 años, 6 meses
Puntos: 14
Respuesta: llamar a funcion creada en musql desde java

Si te da 0 es que debe estar saltando una excepción en el try-catch.

¿Puedes poner que te retorna la excepción?
__________________
Web Admin:
http://www.coretec.es
Tutoriales, Noticias y Recursos Liferay y J2EE
  #7 (permalink)  
Antiguo 03/06/2011, 08:18
 
Fecha de Ingreso: mayo-2011
Ubicación: Lima
Mensajes: 89
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: llamar a funcion creada en musql desde java

Gracias hkadejo... era el tipo de dato lo que estaba mal y eso era lo que hacia que retorne 0... ahora funciona de maravilla gracias a todos...

Etiquetas: funcion, musql
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 13:46.