我在 Java 中有一个函数,它使用可调用语句并使用单词“call”调用 MySQL 中模式的函数。它工作正常。
但是如果在我的 sql 中我写:
call myFunction(); ( in this case :call getNumberOfIdeasDB();)
它不会工作我得到:
PROCEDURE ... doesnt exist.
令我感到奇怪的是,它在 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 ...}
是执行存储过程的 JDBC 转义(它在 JDBC 规范中定义)。这种转义允许您以相对独立于数据库的方式编写存储过程调用。
然后 JDBC 驱动程序必须将其转换为底层数据库的正确语句。
函数是否应该被调用是完全不同的事情,但 MySQL Connector/J 的实现认为它是。
关于java - "call"用于调用 mysql 函数在 jdbc 上工作但在 mysql 上不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400329/