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;
}
}