0
CallableStatement callStmt = conn.prepareCall("{ ? = call get_test(?) }");
callStmt.registerOutParameter(1, Types.OTHER);
callStmt.setObject(2, testParam);
callStmt.execute();

PostgreSQL
上面的代码显示了如何从 PostgreSQL 数据库调用存储过程,该数据库当前在我正在使用的应用程序上实现。

-------------------------------------------------- ---------------------

CallableStatement callStmt = conn.prepareCall("{ call get_test(?) }");
callStmt.setObject(1, testParam);
callStmt.execute();

MySQL
使用与实现 PostgreSQL 数据库的代码相同的逻辑,上面是我在应用程序上实现 MySQL 时尝试的代码。但是,我正在调用的过程被视为一个函数。这将导致显示get_test函数不存在的错误。

另一方面,下面的代码工作得很好。

PreparedStatement prepStmt = conn.prepareCall("{ call get_test(?) }");
prepStmt .setObject(1, testParam);
prepStmt .execute();

这是我的问题: - 为什么 Java 在使用 CallableStatement 时将存储过程视为函数?

4

1 回答 1

1

我不认为它在程序和函数之间有很大的区别。只需使用 prepareCall(),而不是 prepareStatement() 来调用 sql 函数或过程,一切都会完美运行。

顺便说一句,您的 PostgreSQL 示例也使用了 prepareCall。

我假设这条线 CallableStatement callStmt = conn.prepareStatement("{ call get_test(?) }"); 甚至不会编译。

于 2013-08-30T08:04:18.540 回答