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:
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: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
Código Java:
Ver original
//funcion que realiza el calculo de horas en base al id del prestador, //la fecha de inicion y la fecha de termino //establece conexion con la base de datos conecta=ConectarBD_asistencia_servicio(); //guarda el total de horas calculadas por el procedimiento almacenado try{ //prepara al procedimiento almacenado y pasa los parametros de la //funcion para buscar los datos pctoCalcularHoras=conecta.prepareCall("{call calcular_horas(?,?,?)}"); pctoCalcularHoras.setString(1,id_prestador); //ejecuta el procedimiento almacenado y recorre los registros //de la tabla en busca de los datos resultado=pctoHoraEntrada.executeQuery(); while(resultado.next()){ //evita que el dato obtenido no sea null si no lo es procede a realizar //la busqueda de la fecha y conversion a String en caso contrario //sigue el codigo su flujo normal y retorna la variable fechainicio //la cual esta debidamente inicializada //NOTA: esto se realizo asi para evitar el error java.lang.NullPointerException if(horas_calculadas!=null){ total_horas=total_horas+formato_hora.format(horas_calculadas); }//termina if }//termina while //retorna la funcion los datos encontrados por el procedimiento almacenado return total_horas; }//termina try //en caso de existir algun impedimento se despliega un mensaje //indicando el error return null; }//termina catch }//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
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:
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? 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