我在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的实现认为它确实如此。