【发布时间】:2016-02-18 07:14:28
【问题描述】:
如何在Java中进行这样的查询并得到结果:
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 中从这个过程中得到结果呢?
更新
我试过这个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'
并调用
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 lineproc.executeQuery();根本原因 javax.servlet.ServletException: org.postgresql.util.PSQLException:没有返回结果 查询
但是查询
SELECT filedata.num
FROM filedata
Where filedata.num=1;
返回1。
哪里出错了?
【问题讨论】:
-
psql中的SELECT get_geom_difference()怎么样?你在那里得到结果吗?如果是这样,如果为了测试,您使用带有SELECT get_geom_difference()而不是{call}语法的传统 JDBC 查询语法呢? -
如果您在所有这些答案之后仍然卡住,请首先提供应该在这里开始的信息:正在使用的软件的版本号(一个非常旧的 PostgreSQL 版本,没有预装的过程语言plpgsql,可能是问题),表
filedata的表定义(我的回答中提到的数据类型不匹配可能是一个问题)。
标签: java postgresql