Java中的ExecuteQuery()vs getResultSet()

时间:2018-10-08 10:25:12

标签: java sql jdbc

statement.executeQuerystatement.getResultSet()有什么区别。我相信两者都会为选择语句返回ResultSet,但是当我们应该使用其中的哪个条件时,有没有特定的条件。

2 个答案:

答案 0 :(得分:4)

通常,如果知道执行的是select语句,则应使用executeQuerygetResultSet()方法本身不执行该语句

getResultSetexecute结合使用。 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以获取更详尽的示例 < / p>

答案 1 :(得分:0)

查看JavaDoc中的这些方法。 getResultSet可以返回null,但是executeQuery从不返回null。

还有更多限制。例如,无法在executeQueryPreparedStatement上调用CallableStatement