0

我正在尝试使用 Spring JDBC 在 Sybase 数据库 (ASE 15) 上调用一些遗留存储过程。

我已经让它工作得很好,但我不知道如何从 proc 中获取返回值。

这是我得到的代码:

@Repository
public class SybaseDao extends StoredProcedure {
    private static final String SQL = "db..proc_name";
    private static final String RETURN_VALUE = "rc";
    private static final String IN_DATA = "in_data";

    @Autowired
    public UpdateSybaseDao(DataSource dataSource) {
        super(dataSource, SQL);
        setFunction(true);
        declareParameter(new SqlOutParameter(RETURN_VALUE, NUMERIC));
        declareParameter(new SqlParameter(IN_DATA, NUMERIC));
        compile();
    }

    public void update(Integer inData) {
        Map<String, Object> inputs = new HashMap<String, Object>();
        inputs.put(IN_DATA, inData);
        Map<String, Object> results = execute(inputs);

        Integer returnValue = (Integer) results.get(RETURN_VALUE);
        if (returnValue > 0) {
            // handle this error
        }
    }
}

存储过程不是很重要,但它会进行更新并始终返回 0。如果我使用一些 db 工具运行相同的查询,我会正确得到 0。

更新有效,表被更改,返回值为 3。对我来说,这看起来完全随机。

我这样做对吗?有什么我想念的吗?

如果这很重要,我正在使用 Sybase 的专有驱动程序 jConnect 7。

谢谢。

4

2 回答 2

0

我对 Spring 不够熟悉,不知道我是否正确,但是如果您更改setFunction为会发生什么false?函数和存储过程是两种不同的动物,但我不知道Spring是否区分它们。

于 2011-11-10T15:35:54.987 回答
0

回答我自己的问题。

事实上,我做得对。愚弄我的是另一个工具的返回值是错误的。我从来没想过,这真的没有意义。

无论如何......似乎我的方法有效。

于 2011-11-11T11:31:55.990 回答