您误解了的返回值
getMoreResults()。您还忽略了的返回值
execute(),此方法返回一个
boolean指示第一个结果的类型的:
如果结果为
true,则可使用
getResultSet()来检索
ResultSet,否则
getUpdateCount()可使用以获取更新计数。如果是更新计数,
-1则意味着没有更多结果。请注意,更新计数也将
-1是当前结果为时的计数
ResultSet。最好知道,
getResultSet()如果没有更多结果或结果是更新计数,则应返回null(这是最后一个条件,为什么会有那么多
null值)。
现在,如果要检索更多结果,请致电
getMoreResults()(或它的兄弟接受
int参数)。的返回值
boolean与的含义相同
execute(),因此
false
并不意味着不再有结果 !
如果
getMoreResults()返回false和
getUpdateCount()return
-1(如Javadoc中所述),将没有更多结果。
本质上,这意味着如果您要正确处理所有结果,则需要执行以下 *** 作:
boolean result = stmt.execute(...);while(true) { if (result) { ResultSet rs = stmt.getResultSet(); // Do something with resultset ... } else { int updateCount = stmt.getUpdateCount(); if (updateCount == -1) { // no more results break; } // Do something with update count ... } result = stmt.getMoreResults();}
我的猜测是,在获得实际更新之前,您将获得大量更新计数
ResultSet。
我对Sybase并不是很熟悉,但是它的表亲SQL Server具有“烦人”功能,如果您没有明确地将其放在
SET NOCOUNTON;存储过程的开头,则可以从存储过程返回更新计数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)