Bonjour à vous.
Je me permes de poster ici car je n'ai toujours pas trouvé de reponses à mes questions.
Voilà, je developpe une application en JAVA s'appuyant sur une base de données PostgreSQL.
POur obtenir des données de la base, j'ai crée des procedures stockées qui fonctionnnent tres bien via PGadmin3.
Ces procedures stockés me retournent des enregistrements de plusieurs colonnes (recordset).
Le probleme viens de JDBC. Je n'arrive pas à recuperer mon RecordSet via JDBC.
Voici un exemple de procedure stockée (fonctionnel, rien a été modifié) :
Code:
CREATE OR REPLACE FUNCTION getalllibelleconsequence(text)
RETURNS SETOF consequence_list AS
$BODY$
declare
rl consequence_list%rowtype;
codeLangue ALIAS FOR $1;
begin
FOR rl IN
SELECT
id_consequence,libelle_consequence,id_lib_consequence
FROM
lib_consequence
WHERE
code_langue=codeLangue
LOOP
RETURN NEXT rl;
END LOOP;
RETURN;
end
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
lorsque je fais en mode console :
Code:
select * from getalllibelleconsequence('FR');
Postgres me retourne bien mon recordset (ici, 8 enregistrements de 3 colonnes)
consequence_list a été correctement defini en amont.
Voici le code java associé :
Code:
conn.setAutoCommit(false);
CallableStatement cstmt = conn.prepareCall("{?= call GetAllLibelleConsequence ( ? ) }");
cstmt.registerOutParameter(1, Types.OTHER);
cstmt.setString(2, "FR");
cstmt.execute();
rs = (ResultSet)cstmt.getObject(1);
while(rs.next())
System.out.println(rs.getString("libelle_consequence"));
rs.close();
cstmt.close();
stmt.close();
En message d'erreur (sous eclipse), j'obtiens :
Code:
A CallableStatement Function was executed and the return was of type (java.sql.Types=4) however type=java.sql.Types=1111 was registered.
J'ai pourtant suivi la doc.
J'en deduis que le type en sortie n'est pas bon.
Effectivement, postgres me retourne un INTEGER (au lieu de mon recordset).
Je veux juste un record set, pas un interger (ici = 1, vas savoir pourquoi charles ...)
Je ne trouve aucune doc clair à ce sujet.
Le bouquin d'Oreilly est totalement muet à ce propos (c'est rare pour un Oreilly) ...
Help
Merci d'avance.[/i]
Partager