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
或者,我认为如果我从这个查询中创建一个Postgres存储过程会更好。
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'
并将其称为
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();
但是如何在Java中从这个过程中获取结果呢?
更新
我尝试了这个存储过程
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'
并调用
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);
并且遇到了错误:
org.apache.jasper.JasperException:处理JSP页面/commit_changes.jsp时出现异常,位于第25行
in line
proc.executeQuery();根本原因javax.servlet.ServletException: org.postgresql.util.PSQLException:查询未返回任何结果
但是查询
SELECT filedata.num
FROM filedata
Where filedata.num=1;
返回 1
。
哪里有错误?
psql
中使用SELECT get_geom_difference()
有什么结果吗?如果有的话,那么如果您使用传统的 JDBC 查询语法来测试,而不是{call}
语法,会发生什么情况? - Craig Ringerfiledata
表的表定义(如我回答中提到的数据类型不匹配可能是问题所在)。 - Erwin Brandstetter