如何从Spring Jdbc中的存储过程读取返回值(不包括过程中的参数)

时间:2013-10-25 06:11:07

标签: java spring stored-procedures sybase-ase spring-jdbc

如何在Spring Jdbc中读取存储过程的返回值(不带参数)?

我使用的是Sybase ASE数据库。

程序示例:

CREATE PROCEDURE dbo.procedureA (
 @a int
)
as
begin
    IF EXISTS (SELECT 1 FROM dbo.T WHERE a = @a)
        return 1
    ELSE
        return -1
end

3 个答案:

答案 0 :(得分:2)

参考:http://www.databaseskill.com/1270151/ 关键点是:SimpleJdbcCall.withReturnValue()指示SimpleJdbcCall对象将返回值放在结果映射中,键为“RETURN_VALUE”。所以你可以像访问它一样 (整数)simpleJdbcCall.execute()。得到( “RETURN_VALUE”)

对于Sybase,没有必要声明SqlOutParameter“RETURN_VALUE”

答案 1 :(得分:0)

处理此问题的最佳方法是使用它在Spring-Jdbc项目中的SimpleJdbcCall

使用SimpleJdbcCall,您可以为此目的声明输入和输出参数。

你可以这样做:

SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(dataSource);
simpleJdbcCall.withCatalogName("dbo");
simpleJdbcCall.withProcedureName("procedureA ");
simpleJdbcCall.setAccessCallParameterMetaData(false);
simpleJdbcCall.declareParameters(new new SqlOutParameter("a",Types.NUMERIC));
simpleJdbcCall.execute();

更多信息here

希望它有所帮助。

答案 2 :(得分:-1)

这可能会有所帮助,虽然我自己还没有尝试过;

http://forum.spring.io/forum/spring-projects/data/114859-return-value-of-stored-procs-using-storedprocedure-class-and-not-simplejdbccall

public MyStoredProc(JdbcTemplate jdbcTemplate) {
    super(jdbcTemplate, "mystoredproc");
    setFunction(true);
    declareParameter(new SqlOutParameter("Result", Types.NUMERIC));
    declareParameter(new SqlInOutParameter("otherparam1", Types.INTEGER));
    declareParameter(new SqlParameter("otherparam2", Types.INTEGER));
    allowsUnusedParameters();
    compile();
}