2013-08-30 56 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

感謝您提及。對不起,不注意代碼。 –