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//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);
pctoCalcularHoras.
setDate(2,
Date.
valueOf(fecha_inicio
)); pctoCalcularHoras.
setDate(3,
Date.
valueOf(fecha_termino
));
//ejecuta el procedimiento almacenado y recorre los registros
//de la tabla en busca de los datos
resultado=pctoHoraEntrada.executeQuery();
while(resultado.next()){
Date horas_calculadas
=resultado.
getDate(1); //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 originalresultado=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?