2016-06-07 40 views
3

JDBI有調用過程的註釋@SqlCall,但現在標註此註釋的方法只能返回nullOutParametersJDBI支持存儲過程不帶參數

所以,現在反正是有,我們可以調用像下面出參數的過程時,通過OutParameters得到了參數:

CREATE PROCEDURE get_total (IN num1 INT, IN num2 INT, OUT result INT) 
BEGIN 
    SELECT num1 + num2 INTO result; 
END; 

所以現在我的臨時解決方案是:

@SqlCall("call get_total(:num1, :num2, @result)") 
public abstract void getTotal(@Bind("num1") int num1, @Bind("num2") int num2); 

@SqlQuery("SELECT @result AS result") 
public abstract int getQueryTotal(); 

/** 
* call procedure firstly, then query the out parameter as a variable. 
*/ 
public int getCalculateTotal(int num1, int num2) { 
    getTotal(1, 2); 
    return getQueryTotal(); 
} 

那麼有沒有人有一個很好的方式來獲得輸出參數?

回答

2

您可以將輸出參數與@OutParameter註解註冊:

@SqlCall("call get_total(:num1, :num2, :result)") 
@OutParameter(name="result", sqlType=Types.INTEGER) 
public abstract OutParameters getTotal(@Bind("num1") int num1, @Bind("num2") int num2); 

OutParameters類型有方法來獲取按名稱每個出參數。

+0

這是在JDBIv3的權利?我找不到在JDBIv2中執行此操作的方法(又名DropWizard中的內容) – cacsar

+0

由於它顯然不適合編輯:在JDBIv2中,沒有辦法使用此語法獲取輸出參數。 @OutParameter在您的問題後添加到JDBIv3(預發行)以解決此問題。 – cacsar

+0

道歉 - 我寫了錯誤的例子。 @SqlCall可以返回void或OutParameters對象。將編輯我的答案。 – qualidafial