2016-06-07 6 views
3

JDBI имеет @SqlCall аннотация для процедуры вызова, но в настоящее время метод, отмеченный этой аннотацией, может возвращать только null или OutParameters.JDBI поддерживает хранимую процедуру с параметром out

Так что сейчас есть в любом случае мы можем получить из параметра через 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 нет способа получить параметры out с помощью этого синтаксиса. @OutParameter был добавлен в JDBIv3 (preerelease) после вашего вопроса для решения этой проблемы. – cacsar

+0

Извинения. Я написал пример неправильно. @SqlCall может возвращать void или объект OutParameters. Изменит мой ответ. – qualidafial