Sunday, June 8, 2008

[pgsql-es-ayuda] generatedKeys, jdbc: no logro obtener llaves generadas

Hola a todos!
Es mi primer mensaje a esta lista y obviamente con una pregunta. Espero
no quedar fuera de tema.
Estoy haciendo una aplicacion en java y accedo a la base de datos usando
JDBC, pero necesito ocupar el valor de una llave que fue generada
automaticamente (serial).
En java estoy ocupando el metodo getGeneratedKeys(propia de jdbc) que me
debiera entregar las llaves que se crearon tras las llamada que hago a
una funcion de postgres.
Un extracto del codigo en java es:

String stringConsulta = "select ingresarVoucherEntrada(?,?,?,?)";
CallableStatement consulta = conexion.prepareCall(stringConsulta);
java.sql.Date fechaSql = new Date(fechaemision.getTime());
consulta.setInt(1, idempleado);
consulta.setInt(2, idproveedor);
consulta.setDate(3, fechaSql);
consulta.setInt(4, documentoAsociado);
consulta.executeQuery();

llaveGenerada = consulta.getGeneratedKeys();
if (llaveGenerada.next()){
int key = llaveGenerada.getInt(1);
System.out.println("llaves: "+key);
}
else{
System.err.println("No tengo una llave!.");
}

Y obviamente siempre esta entran al else.

La funcion que tengo en postgres es;

CREATE OR REPLACE function ingresarVoucherEntrada( _idEmpleado "int4",
_idProveedor "int4", _fechaEmision"date", _documentoAsociado"int4")
returns void as $$

BEGIN
insert into voucherEntrada (idEmpleado, idProveedor, fechaEmision,
docuementoasociado)
values (_idEmpleado, _idProveedor, _fechaEmision,_documentoAsociado)
;
END
$$LANGUAGE 'plpgsql' VOLATILE;

Estoy haciendo algo mal con el metodo getGeneratedKeys? Tiene algo malo
la funcion que hice en postgres? Existe otra manera de obtener las
llaves que se generaron automaticamente?


Muchas gracias por los comentarios.
--
visita mi weblog!
http://trasto.hopto.org/weblog
softwarelibre@diinf
http://softwarelibre.diinf.usach.cl

No comments: