我在 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 中并且工作正常我只是不知道为什么“调用”这个词在这里起作用。
{?= call ...}
是一个JDBC转义(它在JDBC规范中定义)来执行存储过程。这种转义允许您以相对独立于数据库的方式编写存储过程调用。
JDBC 驱动程序然后必须将其转换为底层数据库的正确语句。
函数是否应该可调用是完全不同的事情,但是 MySQL Connector/J 的实现认为它可以,并提供了翻译(可能是像
select getNumberOfIdeasThisWeek()
这样的东西)。相反,如果您使用了 call getNumberOfIdeasThisWeek()
(即,没有 {?=
和 }
),您可能会收到与直接查询 MySQL 时相同的错误。