调用mysql函数的“调用”在jdbc上工作但在mysql上没有

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用mysql函数的“调用”在jdbc上工作但在mysql上没有相关的知识,希望对你有一定的参考价值。

我在java中有一个函数,它使用一个可调用语句,并使用“call”一词调用mysql中一个模式的函数。它工作正常。

但如果在我的SQL中我写道:

call myFunction(); ( in this case :call getNumberOfIdeasDB();)

它不会工作我得到:

程序......不存在。

我很奇怪它在Java中工作但在MySQL中不工作。你能帮我理解原因吗?

这是我在Java中的功能,即使我认为不相关。

public static double getNumberOfIdeasDB() {

    Connection co = riverManager.getConnection("jdbc:...");
    CallableStatement ps = co.prepareCall("{?= call getNumberOfIdeasThisWeek()}"); //10

    ps.registerOutParameter(1, java.sql.Types.DOUBLE);

    ps.execute();

    return ps.getDouble(1);
}

它在try-catch中并且工作正常我只是不知道为什么在这里“call”这个词起作用。

答案

{?= call ...}是JDBC转义(它在JDBC规范中定义)以执行存储过程。此转义允许您以相对数据库无关的方式编写存储过程调用。

然后,JDBC驱动程序必须将其转换为底层数据库的正确语句。

函数是否应该可调用是一个完全不同的问题,但MySQL Connector / J的实现认为它确实如此。

以上是关于调用mysql函数的“调用”在jdbc上工作但在mysql上没有的主要内容,如果未能解决你的问题,请参考以下文章

来自dispatch_async全局崩溃的C函数调用,但在主队列上工作

为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效

JDBC调用MySQL的调用过程CallableStatement

输出参数中的 mysql/jdbc 函数

JDBC 代码调用返回值的存储函数时出错

jmeter 调用mysql数据库,使用JDBC请求执行相关SQL