【发布时间】:2012-12-26 05:29:32
【问题描述】:
我在 postgres 数据库中有一个存储过程。我正在使用postgres JDBC驱动程序执行存储过程,并且我不关心返回类型,并且无法执行查询。说明函数名附近有语法错误。
在返回行的过程中,我已经能够通过 PreparedStatement 和设置参数来做到这一点,例如:
PreparedStatement prepared = connection.prepareStatement("SELECT * FROM NonQueryProcedure(?)");
prepared.setInt(1, 999);
// ....
ResulSet resultSet = prepared.executeQuery();
但是,我似乎无法让它适用于我不关心返回类型的“更新”存储过程。我试过使用connection.prepareStatement()和prepareCall(),也试过用statement.execute()、.executeUpdate()和.executeQuery()执行,没有成功。
如何在不关心返回类型的情况下执行存储过程?
【问题讨论】:
-
.execute()应该可以解决问题。也许您的 SQL 无效。我们能看到吗? -
我已经通过 postgres shell 成功运行了该过程。您是否建议将 .execute() 与 .prepareStatement() 一起使用? statement = connection.prepareStatement("nonQueryProcedure1(?)");语句.执行();。不起作用。
-
如果我将准备好的语句创建为:PreparedStatement Prepared = connection.prepareStatement("SELECT nonQueryProcedure1(?)");也必须在命令行上执行此操作。不知道为什么。不熟悉该 SQL 语法。也许它是特定于 postgres 的?
-
PostgreSQL 本身没有存储过程,只有函数。走
{call nonQueryProcedure1 ? }路线可能会自动将其包装在一个 SELECT 中以执行它,就好像它是一个一样,不确定。 -
只要使用
execute("select NonQueryProcedure(?)");
标签: java postgresql jdbc