查询返回多个结果集

Vis*_*hvi 20 java sql jdbc java-ee

我有一个MSSQL数据库,我正在运行以下查询:

select * from projects; select * from user
Run Code Online (Sandbox Code Playgroud)

上面的查询一次返回两个结果集,我无法单独触发两个查询.如何在Java类中同时处理结果集?

Aar*_*lla 23

正确的代码来处理ResultSetJDBC语句返回的多个s:

PreparedStatement stmt = ...;
boolean isResultSet = stmt.execute();

int count = 0;
while(true) {
    if(isResultSet) {
        rs = stmt.getResultSet();
        while(rs.next()) {
            processEachRow(rs);
        }

        rs.close();
    } else {
        if(stmt.getUpdateCount() == -1) {
            break;
        }

        log.info("Result {} is just a count: {}", count, stmt.getUpdateCount());
    }

    count ++;
    isResultSet = stmt.getMoreResults();
}
Run Code Online (Sandbox Code Playgroud)

重要事项:

  • getMoreResults()execute()返回false以指示语句的结果只是一个数字而不是一个数字ResultSet.
  • 您需要检查stmt.getUpdateCount() == -1是否有更多结果.
  • 确保关闭结果集或使用 stmt.getMoreResults(Statement.CLOSE_CURRENT_RESULT)


Hon*_*nza 11

您可以使用Statement.execute(),getResultSet();

PreparedStatement stmt = ... prepare your statement result
boolean hasResults = stmt.execute();
while (hasResults) {
    ResultSet rs = stmt.getResultSet();
    ... your code parsing the results ...
    hasResults = stmt.getMoreResults();
}
Run Code Online (Sandbox Code Playgroud)

  • 这误解了`boolean`返回值的含义:`true`表示下一个结果是`ResultSet`,而`false`表示下一个结果是更新计数(或者,当更新计数为`-1`时,没有更多的结果).这可能发生在SQL Server(和Sybase)上,其中结果集和更新计数可以从存储过程发出. (7认同)