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を返します。データベースツールを使用して同じクエリを実行すると、正しく0が返されます。

更新が機能し、テーブルが変更されます。戻り値は3です。私には完全にランダムに見えます。

私はこれを正しい方法でやっていますか?足りないものはありますか?

それが重要な場合は、Sybase独自のドライバjConnect7を使用しています。

ありがとう。

4

2 に答える 2

0

私はSpringに精通していないので、自分が正しいかどうかを知ることはできませんが、に変更setFunctionするとどうなりfalseますか?関数とストアドプロシージャは2つの異なる動物ですが、Springがそれらを区別するかどうかはわかりません。

于 2011-11-10T15:35:54.987 に答える
0

私自身の質問に答えます。

私は実際にそれを正しくやっていた。私をだましていたのは、別のツールからの戻り値が間違っていたことです。私はそれを考えたことはありませんでした、そしてそれは本当に意味がありませんでした。

とにかく...私のアプローチはうまくいくようです。

于 2011-11-11T11:31:55.990 に答える