我正在调用通过 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
有没有人遇到过这个问题?