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

Java 使用jdbc时如何调用预先配置的postgres函数?,java,postgresql,jdbc,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(); s

我试图使用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。

您可以阅读有关正确方法的文档,在您的情况下,您可以使用:

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注入

感谢您的快速回答,我已经应用了您的解决方案,但结果是一样的,我成功运行了查询,但更改没有反映在数据库中。您是否使用setAutoCommit或不使用setAutoCommit进行了尝试,似乎您没有提交您的声明谢谢!!这就是问题所在