statement.executeQuery
和statement.getResultSet()
有什么区别。我相信两者都会为select语句返回ResultSet
,但是当我们应该使用其中的哪个条件时,是否有任何特定的条件。
最佳答案
通常,如果知道执行的是select语句,则应使用executeQuery
。 getResultSet()
方法本身不执行语句。getResultSet
旨在与execute
结合使用。 execute
方法旨在用于未知的语句类型,或可以产生多个结果(即0或多个更新计数或结果集)的语句。
简而言之:您通常应使用executeQuery
。
一个简单的示例,如果代码不知道它将执行什么查询(更新,查询或更复杂的查询),例如在执行用户提供的查询时,应使用execute
。
另一个示例是SQL Server存储过程,它可以返回多个更新计数和结果集。
处理execute
结果的通用方法是:
boolean isResultSet = statement.execute(sql);
while (true) {
if (isResultSet) {
try (ResultSet rs = statement.getResultSet()) {
// do something with result set
}
} else {
int updateCount = statement.getUpdateCount();
if (updateCount == -1) {
// -1 signals no more results
break;
}
// do something with update count
}
// move to next result
isResultSet = statement.getMoreResults();
}
这样可以确保处理所有*结果。
*:此示例忽略了允许将多个异常与结果集和更新计数交错的系统(如SQL Server)的异常结果,有关更详尽的示例,请参见How to get *everything* back from a stored procedure using JDBC