我調用一個通過JDBC返回多個結果集的Sybase存儲過程。 我需要的是一個名爲「結果」列中的特定結果集 這是我的代碼:通過JDBC調用Sybase存儲過程時產生空結果集
CallableStatement cs = conn.prepareCall(sqlCall);
cs.registerOutParameter(1, Types.VARCHAR);
cs.execute();
ResultSet rs=null;
int count = 1;
boolean flag = true;
while (count < 20000 && flag == true) {
cs.getMoreResults();
rs = cs.getResultSet();
if (rs != null) {
ResultSetMetaData resultSetMetaData = rs.getMetaData();
int columnsCount = resultSetMetaData.getColumnCount();
if (resultSetMetaData.getColumnName(1).equals("Result")) {
// action code resultset found
flag = false;
// loop on the resultset and add the elements returned to an array list
while (rs.next()) {
int x = 1;
while (x <= columnsCount) {
result.add(rs.getString(x));
x++;
}
}
result.add(0, cs.getString(1));
}
}
count++;
}
這裏會發生什麼事是,cs.getMoreResults
,直到它到達目標一個返回很多空結果集。我無法使用cs.getMoreResults
作爲循環條件,因爲它對空結果集返回false。
我放了一個固定的數字來結束循環,條件是沒有返回想要的結果集以防止它進入無限循環。它運行良好,但我不認爲這是正確的。
我認爲在Sybase select @variable = value
從分配返回空結果集有沒有人遇到這樣?
我遇到了與SQL Server這個同樣的問題,你的回答幫我解決這個問題。我無法弄清楚爲什麼具有某些數據的'stmt.execute()'會返回'false',即使我可以清楚地看到手動運行時返回的結果集中的數據。我仍然不確定我是否理解'updateCount()',因爲我不相信存儲過程實際上正在更新任何數據。 – Catfish 2014-04-15 17:41:04
@Catfish你也可以嘗試在你的sp中添加'SET NOCOUNT ON'。 – 2014-04-16 08:23:37
我無權修改存儲的過程。你的答案似乎適用於我的情況。謝謝。 – Catfish 2014-04-16 13:17:02