无法从 java 调用我在 postgresql 中的函数
Posted
技术标签:
【中文标题】无法从 java 调用我在 postgresql 中的函数【英文标题】:Unable to call my function in postgresql from java 【发布时间】:2013-08-23 12:04:17 【问题描述】:String sql2 = "? = call public.insertdepttables('"+stall_be.branchcode+"','"+stall_be.stallcode+"','"+stall_be.nooftables+"')";
System.out.println("below call"+sql2);
cs = conn.prepareCall(sql2);
cs.registerOutParameter(1,Types.INTEGER);
cs.execute();
这段代码运行良好。但是 Postgres 中的表完全不受影响。
我在 Postgres 中的功能是:
DECLARE
count integer=0;
begin
IF no_dept>0 THEN
LOOP
insert into t_dept(dept_code,branch_code)values(no_dept,branch_code);
no_dept=no_dept-1;
count=count+1;
EXIT when no_dept =0;
END LOOP ;
END IF;
RETURN count;
end
【问题讨论】:
PostgreSQL 函数返回什么值?你检查了吗? no_dept > 0 吗?你可以返回 no_dept 而不是另一个计数器。 您的“函数”缺少必要的函数头。请提供完整的功能。还缺少:Postgres 版本和表定义。 【参考方案1】:这里有很多问题。
函数的参数名称很有可能与列名称冲突。但是你对基本函数头保密。
我想知道你为什么要对函数名进行模式限定public
.insertdepttables
,而不是函数内的表名:insert into
t_dept
强>。 SHOW search_path
能得到什么?
另外,使用prepared statements传递函数参数而不是串联字符串,以防止各种错误和SQL注入。
但是,您很有可能可以使用generate_series()
将所有这些替换为简单的INSERT
语句。但同样,相关信息不是问题。
【讨论】:
以上是关于无法从 java 调用我在 postgresql 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Java 中,调用 PostgreSQL 函数,为啥我收到一个错误,通知该函数不存在?
Postgresql 11:存储过程调用错误 - 要调用过程,请使用 CALL、Java
使用 jooq/postgresql 从 json 中提取键/值对 - java