使用jdbc时如何调用预配置的postgres函数?

时间:2018-07-24 08:20:32

标签: java postgresql jdbc

我正在尝试使用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运行查询时,可以看到添加了该行,但是当我运行与上面编写的相同的查询时,什么也没发生。

还尝试将executeQuery替换为execute和executeUpdate。

1 个答案:

答案 0 :(得分:3)

您可以阅读有关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();

有关您的代码的重要信息

  • 如果您打算使用整数1而不是字符串"1",则必须将callStmt.setString更改为callStmt.setInt
  • postgres的默认架构是公共的,因此您无需提及它,如果您使用其他架构,则可以提及它
  • Java "中的引号应由\"转义
  • 请勿将属性与查询连接在一起,这可能会导致语法错误和SQL注入