Comment appeler PostgreSQL procédure en Java?

Comment faire de requête de ce type en Java et obtenir les résultats:

SELECT filedata.num,st_area(ST_Difference(ST_TRANSFORM(filedata.the_geom,70066),filedata_temp.the_geom))
FROM filedata, filedata_temp
Where filedata.num=filedata_temp.num

Ou, je pense que ce sera mieux si je crée une procédure dans Postgresql à partir de cette requête.

CREATE OR REPLACE FUNCTION get_geom_difference()
RETURNS void AS
$$
BEGIN
SELECT filedata.num,st_area(ST_Difference(ST_TRANSFORM(filedata.the_geom,70066),filedata_temp.the_geom))
FROM filedata, filedata_temp
Where filedata.num=filedata_temp.num

end;
$$
LANGUAGE 'plpgsql'

et de l'appeler

Connection ce_proc= null;
ce_proc = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgis","postgres","123456");
java.sql.CallableStatement proc =  ce_proc.prepareCall("{get_geom_difference()}");
proc.execute();
proc.close();
ce_proc.close();

Mais comment obtenir des résultats de cette procédure en Java?

Mise à JOUR

J'ai essayé cette SP

DROP FUNCTION get_geom_difference();

CREATE OR REPLACE FUNCTION get_geom_difference()
RETURNS integer AS
$$
DECLARE

tt integer;
BEGIN
SELECT filedata.num INTO tt
FROM filedata
Where filedata.num=1;
RETURN tt;

END;
$$
LANGUAGE 'plpgsql'

et appel

Class.forName("org.postgresql.Driver");
Connection connect= null;
connect = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgis","postgres","123456");
java.sql.CallableStatement proc =  connect.prepareCall("{?=call get_geom_difference()}");
proc.registerOutParameter(1, java.sql.Types.INTEGER);
proc.executeQuery(); 
ResultSet results = (ResultSet) proc.getObject(1);

et ai une erreur:

org.apache.jasper.JasperException: Une exception s'est produite traitement
Page JSP /commit_changes.jsp à la ligne 25in lineproc.executeQuery();

cause javax.servlet.ServletException:
org.postgresql.util.PSQLException: Pas de résultats ont été rendus par les
requête

Mais de requête

SELECT filedata.num 
FROM filedata
Where filedata.num=1;

retourne 1.

Où est l'erreur?

Qu'en est SELECT get_geom_difference() dans psql? Que vous obtenez un résultat là-bas? Si oui, que diriez-vous si, pour les tests, vous utiliser les classiques JDBC syntaxe de la requête avec un SELECT get_geom_difference() au lieu de {call} syntaxe?
Si vous êtes toujours bloqué après toutes ces réponses, à commencer par fournir de l'information qui aurait dû être ici pour commencer avec: les numéros de Version du logiciel en cours d'utilisation (une très vieille version de PostgreSQL qui n'a pas la langue de la procédure plpgsql pré-installé, pourrait être le problème), la définition de table de table filedata (incompatibilité de type de données comme mentionné dans ma réponse pourrait être un problème).

OriginalL'auteur Kliver Max | 2012-08-08