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
、ターゲットの結果セットに到達するまで、多くのnull結果セットが返されます。cs.getMoreResults
nullの結果セットに対してfalseを返すため、ループ条件として使用できません。
ループが無限ループになるのを防ぐために、必要な結果セットが返されない状態でループを終了するために、固定数を設定しました。うまくいきましたが、これは正しくないと思います。
Sybaseの割り当てから返されたnullの結果セットだと思いますselect @variable = value
誰かが以前にこれに直面したことがありますか?