2016-06-07 104 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