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

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

我在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”这个词起作用。

java mysql jdbc
1个回答
3
投票

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

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

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

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