Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Sybase数据库中使用Spring无法获取单个输出值_Java_Spring_Stored Procedures_Sybase - Fatal编程技术网

Java 在Sybase数据库中使用Spring无法获取单个输出值

Java 在Sybase数据库中使用Spring无法获取单个输出值,java,spring,stored-procedures,sybase,Java,Spring,Stored Procedures,Sybase,存储过程 CREATE PROCEDURE Proc1 AS BEGIN DECLARE @retVal int, @Err int, @Rows int SELECT @retVal = isnull(max(col1), 0) + 1 FROM Table1 BEGIN tran INSERT INTO Table1( col1, col2 ) VALUES(@col1,@col2) SELECT @Err = @@error, @Rows

存储过程

CREATE PROCEDURE Proc1
AS
BEGIN
DECLARE @retVal int,
    @Err    int,
    @Rows   int

SELECT @retVal = isnull(max(col1), 0) + 1 FROM Table1

BEGIN tran

INSERT INTO Table1(
    col1,
    col2

)
VALUES(@col1,@col2)

SELECT @Err = @@error, @Rows = @@rowcount

IF @Err != 0 or @Rows != 1
BEGIN
     rollback tran
     return -75
END

commit tran
return @retVal
END
Java代码

public class InsTable1 extends StoredProcedure implements Executable
{


    public InsTable1 (DataSource dataSource)
    {
        super(dataSource, "Proc1");


        super.declareParameter(new SqlOutParameter("retval", Types.INTEGER));

        super.compile();


    }



    public String executeQuery()
    {
        String retval = "";
        Map<String, Object> inParams = new HashMap<String, Object>(1);

        Map outParams = execute(inParams);

        retval = outParams.get("retval") == null ? "" : outParams.get("retval").toString().trim();
        return retval;
    }
}
公共类InsTable1扩展StoredProcess实现可执行文件
{
公共InsTable1(数据源数据源)
{
超级(数据源,“Proc1”);
super.declareParameter(新的SqlOutParameter(“retval”,Types.INTEGER));
super.compile();
}
公共字符串executeQuery()
{
字符串retval=“”;
Map inParams=新的HashMap(1);
映射输出参数=执行(输入参数);
retval=outParams.get(“retval”)==null?”:outParams.get(“retval”).toString().trim();
返回返回;
}
}
错误

可调用语句返回的输出参数不如应用程序注册的多

记录确实会被插入。但是,即使我删除了输出参数声明,它也不起作用。 这里可能的解决方案是什么?

您需要获取不是输出参数的返回值

声明参数时,添加
withReturnValue()
,确保在outParams映射中获得键“return”

我认为您的代码应该如下所示:(未测试)

公共类InsTable1扩展StoredProcess实现可执行文件
{
公共InsTable1(数据源数据源)
{
超级(数据源,“Proc1”);
super.declareParameter(新的SqlOutParameter(“retval”,Types.INTEGER));
super.withReturnValue();
super.compile();
}
公共字符串executeQuery()
{
字符串retval=“”;
Map inParams=新的HashMap(1);
映射输出参数=执行(输入参数);
retval=outParams.get(“return”)==null?”:outParams.get(“return”).toString().trim();
返回返回;
}
}
public class InsTable1 extends StoredProcedure implements Executable
{
    public InsTable1 (DataSource dataSource)
    {
        super(dataSource, "Proc1");
        super.declareParameter(new SqlOutParameter("retval", Types.INTEGER));
        super.withReturnValue();
        super.compile();
    }

    public String executeQuery()
    {
        String retval = "";
        Map<String, Object> inParams = new HashMap<String, Object>(1);
        Map outParams = execute(inParams);
        retval = outParams.get("return") == null ? "" : outParams.get("return").toString().trim();
        return retval;
    }
}