Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JDBC中执行非查询存储过程_Java_Postgresql_Jdbc - Fatal编程技术网

Java 如何在JDBC中执行非查询存储过程

Java 如何在JDBC中执行非查询存储过程,java,postgresql,jdbc,Java,Postgresql,Jdbc,我在postgres数据库中有一个存储过程。我使用postgres JDBC驱动程序来执行存储过程,我不关心返回类型,也不能执行查询。这表明函数名附近有语法错误 在返回行的过程中,我可以通过PreparedStatement和设置参数来实现这一点,如: PreparedStatement prepared = connection.prepareStatement("SELECT * FROM NonQueryProcedure(?)"); prepared.setInt(1, 999); //

我在postgres数据库中有一个存储过程。我使用postgres JDBC驱动程序来执行存储过程,我不关心返回类型,也不能执行查询。这表明函数名附近有语法错误

在返回行的过程中,我可以通过PreparedStatement和设置参数来实现这一点,如:

PreparedStatement prepared = connection.prepareStatement("SELECT * FROM NonQueryProcedure(?)");
prepared.setInt(1, 999);
// ....
ResulSet resultSet = prepared.executeQuery();
但是,对于一个不关心返回类型的“更新”存储过程,我似乎无法让它工作。我尝试过使用connection.prepareStatement()和prepareCall(),也尝试过使用语句.execute()、.executeUpdate()和.executeQuery()执行它,但没有成功


如何执行一个不关心返回类型的存储过程?

如果没有实际的语法错误,我不能确定,但请尝试以下方法:

"SELECT * FROM \"getData\"(?)"
CamelCase/PascalCase在任何SQL数据库中都不是好主意。要么将其折叠成一个大小写,您看到的就是AmassFundReadableLetters,要么它需要引用,您将永远需要在任何时候键入“Amassofleters和QuotesAndShiftKeysandMyFingerShurt”,以避免语法错误。

因为PostgreSQL没有“真正的”过程,只需使用
SELECT
语句执行函数:

statement.execute("select NonQueryProcedure(?)");

请注意,在PL/pgSQL函数中,可以使用该语句调用此类函数。但是这在PL/pgSQL块之外是不可用的。

.execute()
应该可以做到这一点。也许您的SQL无效。我们能看到吗?我已经通过postgres shell成功地运行了这个过程。您是否建议将.execute()与.prepareStatement()一起使用?语句=连接。准备语句(“非查询过程1(?);语句。execute();。不起作用。如果我将准备好的语句创建为:PreparedStatement prepared=connection.prepareStatement(“选择nonQueryProcedure1(?);也必须在命令行上这样做。不知道为什么。不熟悉SQL语法。也许它是特定于postgres的?PostgreSQL本身没有存储过程,只有函数。走
{call nonQueryProcedure1?}
路线可能会自动将其包装在一个SELECT中,就像它是一个一样执行它,不确定。只需使用
执行(“SELECT NonQueryProcedure(?)