我试图使用java代码调用一个预先配置的函数。
这是我正在使用的代码:

Class.forName("org.postgresql.Driver");
c = DriverManager.getConnection("jdbc:postgresql://" + ip + ":5432/" + db,
                            username, password);
c.setAutoCommit(false);
stmt = c.createStatement();
stmt.executeQuery( "SELECT public.myFunc ("1","2","3"));

stmt.close();
c.close();

函数本身有一些验证,最后是一个INSERT命令。
当我从pgAdmin运行查询时,我可以看到行被添加,但是当我运行与上面所写的相同的查询时,什么也不会发生。
还尝试用execute和executeUpdate替换executeQuery。

最佳答案

您可以阅读有关Calling Stored Functions正确方式的文档,在您的案例中,您可以使用:

CallableStatement callStmt = c.prepareCall("{call myFunc(?, ?, ?)}");
callStmt.setString(1, "1");
callStmt.setString(2, "2");
callStmt.setString(3, "3");
callStmt.execute();
callStmt.close();

关于你的代码很重要
如果要使用Integer1而不是String"1"则必须将callStmt.setString更改为callStmt.setInt
postgres的默认模式是public,因此您不必提及它,如果您使用其他模式,您可以提及它
Java中的引号应该由"转义
不要将属性与查询连接起来,这会导致语法错误和SQL注入

10-05 20:02