[英]How to call stored procedures in Sybase correctly
我試圖使用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。
謝謝。
我對Spring不夠熟悉,無法知道我是否正確,但是如果將setFunction
更改為false
會發生什么呢? 函數和存儲過程是兩種不同的動物,但是我不知道Spring是否區分它們。
回答我自己的問題。
我實際上是做對了。 愚弄我的是另一個工具的返回值是錯誤的。 我從沒想過,這真的沒有道理。
無論如何...似乎我的方法可行。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.