我在Java中有一个函数,它使用一个可调用语句并调用MySQL中带有“call”一词的模式的函数。它工作正常。
但是如果在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);
}
它是在一个尝试捕捉和工程罚款我只是不知道为什么在这里这个词“呼吁”工程。
1条答案
按热度按时间euoag5mw1#
{?= call ...}
是执行存储过程的JDBC转义(在JDBC规范中定义)。此转义允许您以相对独立于数据库的方式编写存储过程调用。然后JDBC驱动程序必须将其转换为底层数据库的正确语句。
函数是否应该是可调用的是一个完全不同的问题,但MySQL Connector/J的实现认为它是可调用的,并提供了一个翻译(可能是像
select getNumberOfIdeasThisWeek()
这样的东西)。如果你使用的是call getNumberOfIdeasThisWeek()
(也就是说,没有{?=
和}
),你可能会收到与直接查询MySQL时相同的错误。