调用 MySQL 函数的“调用”在 JDBC 上工作,但在 MySQL 本身上不起作用

问题描述 投票:0回答:1

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

但是如果我在 MySQL 中写:

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 中并且工作正常我只是不知道为什么“调用”这个词在这里起作用。

java mysql jdbc
1个回答
3
投票

{?= call ...}
是一个JDBC转义(它在JDBC规范中定义)来执行存储过程。这种转义允许您以相对独立于数据库的方式编写存储过程调用。

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

函数是否应该可调用是完全不同的事情,但是 MySQL Connector/J 的实现认为它可以,并提供了翻译(可能是像

select getNumberOfIdeasThisWeek()
这样的东西)。相反,如果您使用了
call getNumberOfIdeasThisWeek()
(即,没有
{?=
}
),您可能会收到与直接查询 MySQL 时相同的错误。

© www.soinside.com 2019 - 2024. All rights reserved.