Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/09/2013, 07:42
bibliotecario08
 
Fecha de Ingreso: agosto-2013
Ubicación: d.f.
Mensajes: 38
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta problema con funcion error java.lang.NullPointeException

saludos amigos esta pregunta la postie en otro foro en el que estoy registrado asi que la pongo aqui para que me den su opinion y consejos hacerca de como puedo solucionar esto.

estoy por terminar una aplicacion en la cual hago uso de postgres como gestor de base de datos, tengo el siguiente procedimiento almacenado:

Código:
CREATE OR REPLACE FUNCTION calcular_horas(id character, finicio date, ftermino date)
  RETURNS interval AS
'select sum(t_transcurrido) from checar where (fecha>=finicio and fecha<=ftermino) and id_prestatario=id;'
  LANGUAGE sql
con este procedimiento almacenado obtendo la suma de horas de la columna t_transcurrido cuando se cumple la condicion en el where que es un par de fechas establecidas y el id de un prestador, el tipo d eretorno segun el gestor es interval, este procedimiento ya lo probe en el gestor y si me da el dato correcto, ahora este procedimiento lo llamo en mi aplicativo java en la siguiente funcion:

Código Java:
Ver original
  1. //funcion que realiza el calculo de horas en base al id del prestador,
  2.    //la fecha de inicion y la fecha de termino
  3.    public String CalcularHoras(String id_prestador, String fecha_inicio, String fecha_termino){
  4.    
  5.       //establece conexion con la base de datos  
  6.       conecta=ConectarBD_asistencia_servicio();  
  7.  
  8.       //guarda el total de horas calculadas por el procedimiento almacenado
  9.       String total_horas="";
  10.    
  11.       try{
  12.          //prepara al procedimiento almacenado y pasa los parametros de la
  13.          //funcion para buscar los datos
  14.          pctoCalcularHoras=conecta.prepareCall("{call calcular_horas(?,?,?)}");
  15.          pctoCalcularHoras.setString(1,id_prestador);
  16.          pctoCalcularHoras.setDate(2,Date.valueOf(fecha_inicio));
  17.          pctoCalcularHoras.setDate(3,Date.valueOf(fecha_termino));
  18.          
  19.          SimpleDateFormat formato_hora=new SimpleDateFormat("HH:mm:ss");
  20.          
  21.          //ejecuta el procedimiento almacenado y recorre los registros
  22.          //de la tabla en busca de los datos
  23.          resultado=pctoHoraEntrada.executeQuery();  
  24.          
  25.          while(resultado.next()){
  26.             Date horas_calculadas=resultado.getDate(1);
  27.             //evita que el dato obtenido no sea null si no lo es procede a realizar
  28.             //la busqueda de la fecha y conversion a String en caso contrario
  29.             //sigue el codigo su flujo normal y retorna la variable fechainicio
  30.             //la cual esta debidamente inicializada
  31.             //NOTA: esto se realizo asi para evitar el error java.lang.NullPointerException
  32.             if(horas_calculadas!=null){
  33.                total_horas=total_horas+formato_hora.format(horas_calculadas);
  34.             }//termina if
  35.            
  36.          }//termina while
  37.          //retorna la funcion los datos encontrados por el procedimiento almacenado
  38.          return total_horas;
  39.          
  40.       }//termina try
  41.       catch(Exception e){
  42.          //en caso de existir algun impedimento se despliega un mensaje
  43.          //indicando el error
  44.          JOptionPane.showMessageDialog(null,e,"Advertencia",JOptionPane.WARNING_MESSAGE);
  45.          return null;
  46.       }//termina catch
  47.        
  48.    }//termina funcion CalcularHoras

al yo correr el programa y pasar los parametros requeridos me marca como ya dije el error de java.lang.NullPointeException, entonses puse un breakpoint en el encabezado de la funcion y corri de nuevo el programa para ir paso a paso y saber donde esta el error y lo que observe fue que al llegar a esta linea:

Código Java:
Ver original
  1. resultado=pctoHoraEntrada.executeQuery();

llega a esta linea y al dar el siguiente paso en vez de seguir el flujo normal salta hasta el catch y me muestra este error.

¿ustedes que opinan?, ¿me falta algo?, a mi parecer si falla esta linea tal vez es por el tipo de retorno del procedimiento almacenado (interval) que posiblemente no sea compatible con la variable de tipo ResultSet resultado al momento de ejecutar el query, espero que puedan ayudarme ya que es la ultima parte que me falta para finalizar y poder entregar este programa.

NOTA: pense que el error podria ser causado por el tipo de dato devuelto por la funcion (interval) asi que se me ocurrio hacer un cast para convertirlo en varchar de la siguiente manera:

Código:
CREATE OR REPLACE FUNCTION calcular_horas(id character, finicio date, ftermino date)
  RETURNS character varying AS
'select cast(sum(t_transcurrido) as varchar) from checar where (fecha>=finicio and fecha<=ftermino) and id_prestatario=id;'
  LANGUAGE sql
esto tambien ya lo prove en el gestor de base de datos y si funciona si me devuelve la suma de horas en base a los parametros que le ingreso pero desafortunadamente al yo provarlo en la funcion de java sigue saltando el error en la linea de codigo que les mencione ¿que me sugieren amigos?
__________________
"benditos sean todos los libros, pues cuando abres uno, te sumerges en un mundo nuevo y totalmente diferente..."