如何将 JDBC4PreparedStatement 与期望 OUT 参数的 MySQL 存储过程一起使用?

Posted

技术标签:

【中文标题】如何将 JDBC4PreparedStatement 与期望 OUT 参数的 MySQL 存储过程一起使用?【英文标题】:How to use JDBC4PreparedStatement with a MySQL stored procedure expecting an OUT parameter? 【发布时间】:2017-06-16 08:05:15 【问题描述】:

我正在尝试使用 JDBC4PreparedStatement 从 Java 调用存储过程。存储过程接受两个输入参数和一个输出。我通过调用preparedStatement.setString(index, param)设置了两个输入参数

但我对输出进行了相同的尝试并收到此错误: OUT or INOUT argument 3 for routine db.deleteItem is not a variable or NEW pseudo-variable in BEFORE trigger

我需要使用特定类型吗?如果是这样,我该如何设置?我找不到任何好的例子。

谢谢

【问题讨论】:

【参考方案1】:

您不应为此使用准备好的语句,而应使用可调用的语句。您可以将可调用语句视为具有额外功能以支持存储过程(包括 OUT 参数之类的东西)的预准备语句。

注册出参数,可以使用CallableStatement.registerOutParameter

【讨论】:

【参考方案2】:

当我们将参数标记为OUTINOUT 时,期望SP 应该能够使用这些参数,同时它应该是一个变量而不是一个值。然后可以在以后的某个时间点使用此变量。

SP 的 OUT / INOUT 参数值没有多大意义,因为 SP 无法操纵该值并因此导致错误。我们只能单独传递 IN 参数的值。

您可以在此处参考this 文档,其中指出:

要使用 OUT 或 INOUT 参数从过程中获取值,请通过用户变量传递参数,然后在过程返回后检查变量的值。 (如果您从另一个存储过程或函数中调用该过程,您还可以将例程参数或局部例程变量作为 IN 或 INOUT 参数传递。)

所以,你可以做的就是类似于接受的答案here!

CALL alextest10 ('p99', 'Madeuppy', '999', 'w9', @a_message);
SELECT @a_message;

希望这会有所帮助!

【讨论】:

很有帮助,我可以在 SQL 中做到这一点。我正在尝试查看如何从 PreparedStatement 分配 INOUT 参数,但它看起来不支持它,而 CallableStatement 支持。

以上是关于如何将 JDBC4PreparedStatement 与期望 OUT 参数的 MySQL 存储过程一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将Ios文件上传到

Qt如何将文字变成图片?

如何将Bitmap保存为本地图片文件?

在MATLAB中如何将图导出

ASP如何将SQLSERVER数据导出到DBF(VF)

如何将CSV格式转换成JSON格式