怎么获取存储过程的返回值啊
比如我建立
create procedure test
    @index int,
    @count int output
as
begin   select * from t
   set @count=0
end我JdbcTemplate中如何获取count的返回值啊

解决方案 »

  1.   

    参考一下吧
    这个返回的是List, 你返回个int就行了~
      

  2.   

    没说清楚,我想获取select * from 出来的list,并且我还想获取存储过程所返回的数据
      

  3.   

    继承StoredProcedure
    先声明
    declareParameter(new SqlReturnResultSet("count",new MyRowMapper())//自定义一个int的RowMapper执行方法
    Map<String, Object> parameters = new HashMap<String, Object>();//你的入参
    Map outParameters = super.execute(parameters);
    return (Integer)outParameters.get("count");试试
      

  4.   

    声明改一下declareParameter(new SqlParameter("count",Types.INTEGER)直接用SqlParameter看看
      

  5.   

    public class SimpleSproc extends StoredProcedure
    {
    private static final String SQL = "test";

    public SimpleSproc(DataSource ds)
    {
            setDataSource(ds);
            setSql(SQL);
            setFunction(true);
            
            declareParameter(new SqlParameter("param", Types.INTEGER));
            declareParameter(new SqlOutParameter("return_value", Types.INTEGER));
    }
    public int execute(int param)
    {
            Map in = new HashMap();
            in.put("param", param);
            
            System.out.println(String.valueOf(in));        Map out = execute(in);        System.out.println(String.valueOf(out));
            
            return (Integer)out.get("return_value");
    }返回值可以取,但是就是output参数取不到,还有就是取不到select以后的东西
      

  6.   

    返回值可以取,但是就是output参数取不到
    这是什么意思?再声明一个 resultset返回的 mapper,然后(List)out.get("return_Mapper");
      

  7.   

    以上代码对于ALTER PROCEDURE [dbo].[testsp]
    @param int
    AS
    BEGIN
    SET NOCOUNT ON;
    select * from bank
    return @param
    END没有问题,但是如果改成ALTER PROCEDURE [dbo].[testsp]
    @param int ,
            @ttt   int output
    AS
    BEGIN
    SET NOCOUNT ON;
    select * from bank
            set @ttt=1
    return @param
    END
    public class SimpleSproc extends StoredProcedure
    {
    private static final String SQL = "testsp";

    public SimpleSproc(DataSource ds)
    {
            setDataSource(ds);
            setSql(SQL);
            setFunction(true);
            
            declareParameter(new SqlParameter("param", Types.INTEGER));
            declareParameter(new SqlOutParameter("ttt", Types.INTEGER));
            compile();
    }
    public int execute(int param)
    {
            Map in = new HashMap();
            in.put("param", 1);        System.out.println(String.valueOf(in));        Map out = execute(in);        System.out.println(String.valueOf(out));
            
            //return (Integer)out.get("return_value");
            return 1;
    }
    }调用就报
    Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: CallableStatementCallback; bad SQL grammar [{? = call testsp(?)}]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: 形参 "@param" 未声明为 OUTPUT 参数,但传递进来的实参请求输出。
    Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 形参 "@param" 未声明为 OUTPUT 参数,但传递进来的实参请求输出。
      

  8.   

    你的ttt既是入参又是出参这样写code试试
    public class SimpleSproc extends StoredProcedure
    {
        private static final String SQL = "testsp";
        
        public SimpleSproc(DataSource ds)
        {
            setDataSource(ds);
            setSql(SQL);
            setFunction(true);
            
            declareParameter(new SqlParameter("param", Types.INTEGER));
            declareParameter(new SqlParameter("ttt", Types.INTEGER));
            //自定义mapper
            declareParameter(new SqlReturnResultSet("return_value",new MyRowMapper());
            declareParameter(new SqlOutParameter("ttt", Types.INTEGER));
            compile();
        }
        public int execute(int param)
        {
            Map in = new HashMap();
            in.put("param", 1);
            in.put("ttt", 1);        Map out = execute(in);        System.out.println(String.valueOf(out.get("return_value")));
            System.out.println(String.valueOf(out.get("ttt")));
            
            return 1;
        }
    }