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