java “call”用于调用MySQL函数,在JDBC上工作,但在MySQL本身上不工作

niknxzdl  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(161)

我在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);
}

它是在一个尝试捕捉和工程罚款我只是不知道为什么在这里这个词“呼吁”工程。

euoag5mw

euoag5mw1#

{?= call ...}是执行存储过程的JDBC转义(在JDBC规范中定义)。此转义允许您以相对独立于数据库的方式编写存储过程调用。
然后JDBC驱动程序必须将其转换为底层数据库的正确语句。
函数是否应该是可调用的是一个完全不同的问题,但MySQL Connector/J的实现认为它是可调用的,并提供了一个翻译(可能是像select getNumberOfIdeasThisWeek()这样的东西)。如果你使用的是call getNumberOfIdeasThisWeek()(也就是说,没有{?=}),你可能会收到与直接查询MySQL时相同的错误。

相关问题