调用mysql函数的“调用”在jdbc上工作但在mysql上没有
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用mysql函数的“调用”在jdbc上工作但在mysql上没有相关的知识,希望对你有一定的参考价值。
我在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的实现认为它确实如此。
以上是关于调用mysql函数的“调用”在jdbc上工作但在mysql上没有的主要内容,如果未能解决你的问题,请参考以下文章
来自dispatch_async全局崩溃的C函数调用,但在主队列上工作
为啥 JDBC 驱动程序调用在 Tomcat 中有效,但在 JBOSS 中无效