2013-08-30 21 views
0
CallableStatement callStmt = conn.prepareCall("{ ? = call get_test(?) }"); 
callStmt.registerOutParameter(1, Types.OTHER); 
callStmt.setObject(2, testParam); 
callStmt.execute(); 

PostgreSQL的
上面的代码显示如何调用从当前对我的工作的应用程序实现的PostgreSQL数据库的存储过程。

的MySQL - Java和MySQL的程序和功能文档集成

-------------------------------------------- ---------------------------

CallableStatement callStmt = conn.prepareCall("{ call get_test(?) }"); 
callStmt.setObject(1, testParam); 
callStmt.execute(); 

的MySQL
使用从执行PostgreSQL数据库的代码相同的逻辑,以上是我在应用程序上实现MySQL时所尝试的代码。但是,我所调用的过程被视为一个函数。这将导致出现get_test函数不存在的错误。

另一方面,下面的代码工作得很好。

PreparedStatement prepStmt = conn.prepareCall("{ call get_test(?) }"); 
prepStmt .setObject(1, testParam); 
prepStmt .execute(); 

我的问题是: - 为什么使用CallableStatement时的Java对待存储过程作为功能?

+0

尝试在函数名称后面和左括号之前放置一个空格,MySQL有时会相当挑剔:'conn.prepareCall(“{call get_test(?)}”)' – FrankPl

回答

1

我不认为它在程序和函数之间有很大的区别。 只需使用prepareCall(),而不是prepareStatement()来调用sql函数或过程,一切都将完美工作。

顺便说一下,您的PostgreSQL示例也使用prepareCall。

我假定这一行 CallableStatement callStmt = conn.prepareStatement(“{call get_test(?)}”); 甚至不会编译。

+0

感谢您提及。对不起,不注意代码。 –