无法从 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

地理位置分散的服务器、PostgreSQL 和 JPA

无法使用 sequelize 从本地节点应用程序连接到 heroku postgresql 数据库

java和postgresql中从日期到长的转换是不一样的