java - "call"用于调用 mysql 函数在 jdbc 上工作但在 mysql 上不工作

标签 java mysql jdbc

我在 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/

相关文章:

ssl - 使用 SSL 的 IBM i DB2 JDBC 加密

Java Gui 不会显示面板和组件

python - 属性错误: 'tuple' object has no attribute 'encode' Arduino and MySQL

java - 准备语句错误: At least one parameter to the current statement is uninitialized

java - MySQL limit子句是如何实现的

mysql - 按列对 MySQL 行进行排序,但不按字母顺序排序

java - 如何使用 JDBC 引用/转义标识符,例如列名?

java - 如何在程序运行时用另一个 JPanel 替换

java - 如何为 React Native 启用 multidex?

java - Android:无法解密值