java.sql.Statement#getMoreResults ( )源码实例Demo

下面列出了java.sql.Statement#getMoreResults ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: weMessage   文件: DatabaseManager.java
public List<String> getAllExistingDevices() throws SQLException {
    List<String> devices = new ArrayList<>();
    String selectDevicesStatementString = "SELECT * FROM " + TABLE_DEVICES;
    Statement selectDevicesStatement = getServerDatabaseConnection().createStatement();

    boolean isResultSet = selectDevicesStatement.execute(selectDevicesStatementString);

    while(true) {
        if(isResultSet) {
            ResultSet resultSet = selectDevicesStatement.getResultSet();
            while(resultSet.next()) {
                String deviceId = resultSet.getString(COLUMN_DEVICE_ID);
                devices.add(deviceId);
            }
            resultSet.close();
        } else {
            if(selectDevicesStatement.getUpdateCount() == -1) {
                break;
            }
        }
        isResultSet = selectDevicesStatement.getMoreResults();
    }
    selectDevicesStatement.close();

    return devices;
}
 
源代码2 项目: lams   文件: ResultSetReturnImpl.java
@Override
public ResultSet execute(Statement statement, String sql) {
	sqlStatementLogger.logStatement( sql );
	try {
		final ResultSet rs;
		try {
			jdbcExecuteStatementStart();
			if ( !statement.execute( sql ) ) {
				while ( !statement.getMoreResults() && statement.getUpdateCount() != -1 ) {
					// do nothing until we hit the resultset
				}
			}
			rs = statement.getResultSet();
		}
		finally {
			jdbcExecuteStatementEnd();
		}
		postExtract( rs, statement );
		return rs;
	}
	catch (SQLException e) {
		throw sqlExceptionHelper.convert( e, "could not execute statement" );
	}
}
 
源代码3 项目: mybatis   文件: DefaultResultSetHandler.java
private ResultSetWrapper getFirstResultSet(Statement stmt) throws SQLException {
  ResultSet rs = stmt.getResultSet();
  //HSQLDB2.1特殊情况处理
  while (rs == null) {
    // move forward to get the first resultset in case the driver
    // doesn't return the resultset as the first result (HSQLDB 2.1)
    if (stmt.getMoreResults()) {
      rs = stmt.getResultSet();
    } else {
      if (stmt.getUpdateCount() == -1) {
        // no more results. Must be no resultset
        break;
      }
    }
  }
  return rs != null ? new ResultSetWrapper(rs, configuration) : null;
}
 
源代码4 项目: mybaties   文件: DefaultResultSetHandler.java
private ResultSetWrapper getFirstResultSet(Statement stmt) throws SQLException {
  ResultSet rs = stmt.getResultSet();
  //HSQLDB2.1特殊情况处理
  while (rs == null) {
    // move forward to get the first resultset in case the driver
    // doesn't return the resultset as the first result (HSQLDB 2.1)
    if (stmt.getMoreResults()) {
      rs = stmt.getResultSet();
    } else {
      if (stmt.getUpdateCount() == -1) {
        // no more results. Must be no resultset
        break;
      }
    }
  }
  return rs != null ? new ResultSetWrapper(rs, configuration) : null;
}
 
源代码5 项目: mybatis   文件: DefaultResultSetHandler.java
private ResultSetWrapper getNextResultSet(Statement stmt) throws SQLException {
  // Making this method tolerant of bad JDBC drivers
  try {
    if (stmt.getConnection().getMetaData().supportsMultipleResultSets()) {
      // Crazy Standard JDBC way of determining if there are more results
      if (!((!stmt.getMoreResults()) && (stmt.getUpdateCount() == -1))) {
        ResultSet rs = stmt.getResultSet();
        return rs != null ? new ResultSetWrapper(rs, configuration) : null;
      }
    }
  } catch (Exception e) {
    // Intentionally ignored.
  }
  return null;
}
 
源代码6 项目: spanner-jdbc   文件: BatchReadOnlyTest.java
@Test
public void testExecuteBatchReadOnly() throws SQLException, NoSuchFieldException,
    SecurityException, IllegalArgumentException, IllegalAccessException {
  for (int testRun = 0; testRun < 2; testRun++) {
    final int numberOfPartitions = 6;
    BatchClient batchClient = mock(BatchClient.class);
    BatchReadOnlyTransaction tx = mock(BatchReadOnlyTransaction.class);
    List<Partition> partitions = new ArrayList<>(numberOfPartitions);
    for (int i = 0; i < numberOfPartitions; i++)
      partitions.add(mock(Partition.class));
    when(tx.partitionQuery(any(), any())).then(new Returns(partitions));
    when(batchClient.batchReadOnlyTransaction(TimestampBound.strong())).then(new Returns(tx));
    Field field = CloudSpannerTransaction.class.getDeclaredField("batchClient");
    field.setAccessible(true);
    field.set(connection.getTransaction(), batchClient);
    connection.setBatchReadOnly(true);
    Statement statement;
    if (testRun % 2 == 0) {
      statement = connection.createStatement();
      assertTrue(statement.execute(SELECT_ALL_FROM_FOO));
    } else {
      PreparedStatement ps = connection.prepareStatement(SELECT_ALL_FROM_FOO);
      assertTrue(ps.execute());
      statement = ps;
    }
    List<ResultSet> resultSets = new ArrayList<>();
    do {
      resultSets.add(statement.getResultSet());
    } while (statement.getMoreResults());
    assertEquals(numberOfPartitions, resultSets.size());
  }
}
 
源代码7 项目: shardingsphere   文件: AbstractStatementAdapter.java
@Override
public final boolean getMoreResults() throws SQLException {
    boolean result = false;
    for (Statement each : getRoutedStatements()) {
        result = each.getMoreResults();
    }
    return result;
}
 
源代码8 项目: mybaties   文件: DefaultResultSetHandler.java
private ResultSetWrapper getNextResultSet(Statement stmt) throws SQLException {
  // Making this method tolerant of bad JDBC drivers
  try {
    if (stmt.getConnection().getMetaData().supportsMultipleResultSets()) {
      // Crazy Standard JDBC way of determining if there are more results
      if (!((!stmt.getMoreResults()) && (stmt.getUpdateCount() == -1))) {
        ResultSet rs = stmt.getResultSet();
        return rs != null ? new ResultSetWrapper(rs, configuration) : null;
      }
    }
  } catch (Exception e) {
    // Intentionally ignored.
  }
  return null;
}
 
源代码9 项目: jTDS   文件: TestBase.java
/**
 * <p> Dump all results produced by the execution of a statement, including
 * update counts, resultsets and generated keys if the statement has been
 * executed using one of the {@link Statement#execute()} that directs the
 * driver to return generated keys. </p>
 *
 * @param statement
 *    {@link Statement} object used for execution
 */
public void dumpAll( Statement statement )
   throws SQLException
{
   int uc = statement.getUpdateCount();
   boolean isResult = uc == -1;

   do
   {
      if( isResult )
      {
         ResultSet res = statement.getResultSet();

         if( res != null )
         {
            dump( res );
         }
      }
      else
      {
         System.out.println( "update count: " + uc );
      }

      // maybe the update created keys
      dumpKeys( statement );
   }
   while( ( isResult = statement.getMoreResults() ) || ( uc = statement.getUpdateCount() ) != -1 );
}
 
源代码10 项目: ignite   文件: JdbcThinStatementSelfTest.java
/**
 * @throws Exception If failed.
 */
@org.junit.Test
public void testExecuteQueryMultipleOnlyDml() throws Exception {
    conn.setSchema(null);

    Statement stmt0 = conn.createStatement();

    int stmtCnt = 10;

    StringBuilder sql = new StringBuilder("drop table if exists test; create table test(ID int primary key, NAME varchar(20)); ");

    for (int i = 0; i < stmtCnt; ++i)
        sql.append("insert into test (ID, NAME) values (" + i + ", 'name_" + i + "'); ");

    assertFalse(stmt0.execute(sql.toString()));

    // DROP TABLE statement
    assertNull(stmt0.getResultSet());
    assertEquals(0, stmt0.getUpdateCount());

    stmt0.getMoreResults();

    // CREATE TABLE statement
    assertNull(stmt0.getResultSet());
    assertEquals(0, stmt0.getUpdateCount());

    for (int i = 0; i < stmtCnt; ++i) {
        assertTrue(stmt0.getMoreResults());

        assertNull(stmt0.getResultSet());
        assertEquals(1, stmt0.getUpdateCount());
    }

    assertFalse(stmt0.getMoreResults());
}
 
源代码11 项目: Oceanus   文件: StatementWrapper.java
@Override
public boolean getMoreResults() throws SQLException {
	for (Statement stmt : statements) {
		if (stmt.getMoreResults()) {
			return true;
		}
	}
	return false;
}
 
源代码12 项目: Oceanus   文件: StatementWrapper.java
@Override
public boolean getMoreResults(int current) throws SQLException {
	for (Statement stmt : statements) {
		if (stmt.getMoreResults(current)) {
			return true;
		}
	}
	return false;
}
 
源代码13 项目: weMessage   文件: MessagesDatabase.java
public List<String> getAccounts() throws SQLException {
    List<String> accounts = new ArrayList<>();

    String selectAccountsStatementString = "SELECT " + COLUMN_MESSAGE_ACCOUNT + ", " + COLUMN_MESSAGE_ROWID + " FROM (SELECT " + COLUMN_MESSAGE_ACCOUNT + ", " + COLUMN_MESSAGE_ROWID + " FROM " + MESSAGE_TABLE + " ORDER BY " + COLUMN_MESSAGE_ROWID + " DESC LIMIT 500) ORDER BY " + COLUMN_MESSAGE_ROWID + " ASC";
    Statement selectAccounts = getDatabaseManager().getChatDatabaseConnection().createStatement();

    boolean isResultSet = selectAccounts.execute(selectAccountsStatementString);

    while(true) {
        if(isResultSet) {
            ResultSet resultSet = selectAccounts.getResultSet();
            while(resultSet.next()) {
                String accountLogin = resultSet.getString(COLUMN_MESSAGE_ACCOUNT);
                String account;
                boolean useContains = false;

                try {
                    account = accountLogin.split(":")[1];
                }catch (Exception ex){
                    useContains = true;
                    try {
                        account = accountLogin.split(":")[0];
                    }catch (Exception exc){
                        account = accountLogin;
                    }
                }

                if (!StringUtils.isEmpty(account) && !accounts.contains(account.toLowerCase())){
                    accounts.add(account.toLowerCase());
                }
            }
            resultSet.close();
        } else {
            if(selectAccounts.getUpdateCount() == -1) {
                break;
            }
        }
        isResultSet = selectAccounts.getMoreResults();
    }
    selectAccounts.close();

    return accounts;
}
 
源代码14 项目: spliceengine   文件: ResultSetTest.java
/**
 * Tests that <code>ResultSet.isClosed()</code> returns the
 * correct value in different situations.
 *
 * @throws SQLException	Thrown if some unexpected error happens
 */
public void testIsClosed() throws SQLException{
    
    Statement stmt = createStatement();
    
    // simple open/read/close test
    ResultSet rs = stmt.executeQuery("values(1)");
    assertFalse("rs should be open", rs.isClosed());
    while (rs.next());
    assertFalse("rs should be open", rs.isClosed());
    rs.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    // execute and re-execute statement
    rs = stmt.executeQuery("values(1)");
    assertFalse("rs should be open", rs.isClosed());
    ResultSet rs2 = stmt.executeQuery("values(1)");
    assertTrue("rs should be closed", rs.isClosed());
    assertFalse("rs2 should be open", rs2.isClosed());
    
    // re-execute another statement on the same connection
    Statement stmt2 = createStatement();
    rs = stmt2.executeQuery("values(1)");
    assertFalse("rs2 should be open" ,rs2.isClosed());
    assertFalse("rs should be open", rs.isClosed());
    
    // retrieve multiple result sets
    stmt.execute("create procedure retrieve_result_sets() " +
            "parameter style java language java external name " +
            "'com.splicemachine.dbTesting.functionTests.tests." +
            "jdbc4.ResultSetTest.threeResultSets' " +
            "dynamic result sets 3 reads sql data");
    stmt.execute("call retrieve_result_sets()");
    ResultSet[] rss = new ResultSet[3];
    int count = 0;
    do {
        rss[count] = stmt.getResultSet();
        assertFalse("rss[" + count + "] should be open", rss[count].isClosed());
        
        if (count > 0) {
            assertTrue("rss[" + (count-1) + "] should be closed", rss[count-1].isClosed());
        }
        ++count;
    } while (stmt.getMoreResults());
    assertEquals("expected three result sets", 3, count);
    stmt.execute("drop procedure retrieve_result_sets");
    
    // close statement
    rs = stmt2.executeQuery("values(1)");
    stmt2.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    // close connection
    Connection conn2 = openDefaultConnection();
    stmt2 = conn2.createStatement();
    rs = stmt2.executeQuery("values(1)");
    conn2.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    stmt.close();
    stmt2.close();
}
 
源代码15 项目: gemfirexd-oss   文件: ResultSetTest.java
/**
 * Tests that <code>ResultSet.isClosed()</code> returns the
 * correct value in different situations.
 *
 * @throws SQLException	Thrown if some unexpected error happens
 */
public void testIsClosed() throws SQLException{
    
    Statement stmt = createStatement();
    
    // simple open/read/close test
    ResultSet rs = stmt.executeQuery("values(1)");
    assertFalse("rs should be open", rs.isClosed());
    while (rs.next());
    assertFalse("rs should be open", rs.isClosed());
    rs.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    // execute and re-execute statement
    rs = stmt.executeQuery("values(1)");
    assertFalse("rs should be open", rs.isClosed());
    ResultSet rs2 = stmt.executeQuery("values(1)");
    assertTrue("rs should be closed", rs.isClosed());
    assertFalse("rs2 should be open", rs2.isClosed());
    
    // re-execute another statement on the same connection
    Statement stmt2 = createStatement();
    rs = stmt2.executeQuery("values(1)");
    assertFalse("rs2 should be open" ,rs2.isClosed());
    assertFalse("rs should be open", rs.isClosed());
    
    // retrieve multiple result sets
    stmt.execute("create procedure retrieve_result_sets() " +
            "parameter style java language java external name " +
            "'org.apache.derbyTesting.functionTests.tests." +
            "jdbc4.ResultSetTest.threeResultSets' " +
            "dynamic result sets 3 reads sql data");
    stmt.execute("call retrieve_result_sets()");
    ResultSet[] rss = new ResultSet[3];
    int count = 0;
    do {
        rss[count] = stmt.getResultSet();
        assertFalse("rss[" + count + "] should be open", rss[count].isClosed());
        
        if (count > 0) {
            assertTrue("rss[" + (count-1) + "] should be closed", rss[count-1].isClosed());
        }
        ++count;
    } while (stmt.getMoreResults());
    assertEquals("expected three result sets", 3, count);
    stmt.execute("drop procedure retrieve_result_sets");
    
    // close statement
    rs = stmt2.executeQuery("values(1)");
    stmt2.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    // close connection
    Connection conn2 = openDefaultConnection();
    stmt2 = conn2.createStatement();
    rs = stmt2.executeQuery("values(1)");
    conn2.close();
    assertTrue("rs should be closed", rs.isClosed());
    
    stmt.close();
    stmt2.close();
}
 
源代码16 项目: gemfirexd-oss   文件: GFXDServiceImpl.java
/**
 * {@inheritDoc}
 */
@Override
public RowSet getNextResultSet(int cursorId, byte otherResultSetBehaviour,
    ByteBuffer token) throws GFXDException {
  ResultSet rs = null;
  try {
    StatementHolder stmtHolder = getStatementForResultSet(token, cursorId,
        "getNextResultSet");
    Statement stmt = stmtHolder.getStatement();
    if (stmt == null) {
      return null;
    }
    final boolean moreResults;
    if (otherResultSetBehaviour == 0) {
      moreResults = stmt.getMoreResults();
    }
    else {
      final int current;
      switch (otherResultSetBehaviour) {
        case gfxdConstants.NEXTRS_CLOSE_CURRENT_RESULT:
          current = EmbedStatement.CLOSE_CURRENT_RESULT;
          break;
        case gfxdConstants.NEXTRS_KEEP_CURRENT_RESULT:
          current = EmbedStatement.KEEP_CURRENT_RESULT;
          break;
        default:
          current = EmbedStatement.CLOSE_ALL_RESULTS;
          break;
      }
      moreResults = stmt.getMoreResults(current);
    }
    if (moreResults) {
      ConnectionHolder connHolder = stmtHolder.getConnectionHolder();
      rs = stmt.getResultSet();
      return getRowSet(stmt, stmtHolder, rs, INVALID_ID,
          connHolder.getConnectionId(), stmtHolder.getStatementAttrs(), 0,
          false, false, 0, connHolder, true, null /*already set*/);
    }
    else {
      return null;
    }
  } catch (Throwable t) {
    cleanupResultSet(rs);
    throw gfxdException(t);
  }
}
 
源代码17 项目: gemfirexd-oss   文件: GFXDServiceImpl.java
/**
 * {@inheritDoc}
 */
@Override
public RowSet getNextResultSet(int cursorId, byte otherResultSetBehaviour,
    ByteBuffer token) throws GFXDException {
  ResultSet rs = null;
  try {
    StatementHolder stmtHolder = getStatementForResultSet(token, cursorId,
        "getNextResultSet");
    Statement stmt = stmtHolder.getStatement();
    if (stmt == null) {
      return null;
    }
    final boolean moreResults;
    if (otherResultSetBehaviour == 0) {
      moreResults = stmt.getMoreResults();
    }
    else {
      final int current;
      switch (otherResultSetBehaviour) {
        case gfxdConstants.NEXTRS_CLOSE_CURRENT_RESULT:
          current = EmbedStatement.CLOSE_CURRENT_RESULT;
          break;
        case gfxdConstants.NEXTRS_KEEP_CURRENT_RESULT:
          current = EmbedStatement.KEEP_CURRENT_RESULT;
          break;
        default:
          current = EmbedStatement.CLOSE_ALL_RESULTS;
          break;
      }
      moreResults = stmt.getMoreResults(current);
    }
    if (moreResults) {
      ConnectionHolder connHolder = stmtHolder.getConnectionHolder();
      rs = stmt.getResultSet();
      return getRowSet(stmt, stmtHolder, rs, INVALID_ID,
          connHolder.getConnectionId(), stmtHolder.getStatementAttrs(), 0,
          false, false, 0, connHolder, true, null /*already set*/);
    }
    else {
      return null;
    }
  } catch (Throwable t) {
    cleanupResultSet(rs);
    throw gfxdException(t);
  }
}
 
源代码18 项目: skywalking   文件: SWStatementTest.java
@Test
public void testPreparedStatementConfig() throws SQLException {
    Statement statement = swConnection.createStatement();
    statement.cancel();
    statement.getUpdateCount();
    statement.setFetchDirection(1);
    statement.getFetchDirection();
    statement.getResultSetConcurrency();
    statement.getResultSetType();
    statement.isClosed();
    statement.setPoolable(false);
    statement.isPoolable();
    statement.getWarnings();
    statement.clearWarnings();
    statement.setCursorName("test");
    statement.setMaxFieldSize(11);
    statement.getMaxFieldSize();
    statement.setMaxRows(10);
    statement.getMaxRows();
    statement.setEscapeProcessing(true);
    statement.setFetchSize(1);
    statement.getFetchSize();
    statement.setQueryTimeout(1);
    statement.getQueryTimeout();
    Connection connection = statement.getConnection();

    statement.execute("SELECT * FROM test");
    statement.getMoreResults();
    statement.getMoreResults(1);
    statement.getResultSetHoldability();
    statement.getResultSet();

    statement.close();
    verify(mysqlStatement).getUpdateCount();
    verify(mysqlStatement).getMoreResults();
    verify(mysqlStatement).setFetchDirection(anyInt());
    verify(mysqlStatement).getFetchDirection();
    verify(mysqlStatement).getResultSetType();
    verify(mysqlStatement).isClosed();
    verify(mysqlStatement).setPoolable(anyBoolean());
    verify(mysqlStatement).getWarnings();
    verify(mysqlStatement).clearWarnings();
    verify(mysqlStatement).setCursorName(anyString());
    verify(mysqlStatement).setMaxFieldSize(anyInt());
    verify(mysqlStatement).getMaxFieldSize();
    verify(mysqlStatement).setMaxRows(anyInt());
    verify(mysqlStatement).getMaxRows();
    verify(mysqlStatement).setEscapeProcessing(anyBoolean());
    verify(mysqlStatement).getResultSetConcurrency();
    verify(mysqlStatement).getResultSetConcurrency();
    verify(mysqlStatement).getResultSetType();
    verify(mysqlStatement).getMoreResults(anyInt());
    verify(mysqlStatement).setFetchSize(anyInt());
    verify(mysqlStatement).getFetchSize();
    verify(mysqlStatement).getQueryTimeout();
    verify(mysqlStatement).setQueryTimeout(anyInt());
    verify(mysqlStatement).getResultSet();
    assertThat(connection, CoreMatchers.<Connection>is(swConnection));

    TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0);
    List<AbstractTracingSpan> spans = SegmentHelper.getSpans(traceSegment);
    assertThat(spans.size(), is(1));
    assertDBSpan(spans.get(0), "Mysql/JDBI/Statement/execute", "SELECT * FROM test");
}
 
源代码19 项目: openbd-core   文件: cfSQLQueryData.java
private void executeAsStatement() throws cfmRunTimeException {
	Connection dataConnection = null;
	Statement stmt = null;
	ResultSet rs = null;

	try {
		dataConnection = setupDataConnection();
		stmt = dataConnection.createStatement();

		if (dataConnection instanceof WrappedConnection)
			((WrappedConnection) dataConnection).setLastQuery("STATEMENT: " + queryString);

		boolean oracleDriver = stmt.getClass().getName().equals("oracle.jdbc.driver.T4CStatement");

		if (!oracleDriver) {
			// the Oracle JDBC driver has a bug: stmt.getUpdateCount() always
			// returns a positive number, instead of -1 when there are no more
			// results; this bug puts the following code into an infinite loop

			// If retrieveGenKeys is true then force it to false if the driver
			// doesn't support the retrieval of generated keys.
			if (retrieveGenKeys)
				retrieveGenKeys = supportsGetGeneratedKeys(dataConnection);

			if (retrieveGenKeys)
				stmt.execute(queryString, Statement.RETURN_GENERATED_KEYS);
			else
				stmt.execute(queryString);

			// With MySQL we need to retrieve the generated keys before
			// stmt.getMoreResults() and stmt.getUpdateCount() are called.
			ResultSet rsGK = initGeneratedKeys(dataConnection, stmt);
			recordsUpdated = 0;

			do { // there may be multiple result sets and/or update counts
				rs = stmt.getResultSet();
				
				if (rs != null && rs != rsGK) { // return the first result set (if any)
					resultSet = true;
					populate(rs, maxRows);
					rs.close();
					break;
				}
				
				recordsUpdated += stmt.getUpdateCount();
			} while (stmt.getMoreResults() || ( (stmt.getUpdateCount()) >= 0));
			
		} else {
			// this is the workaround for the Oracle bug mentioned above
			boolean hasResultSet;
			if (retrieveGenKeys)
				hasResultSet = stmt.execute(queryString, Statement.RETURN_GENERATED_KEYS);
			else
				hasResultSet = stmt.execute(queryString);
			if (hasResultSet) { // Oracle only returns a single result
				rs = stmt.getResultSet();
				if (rs != null) {
					resultSet = true;
					populate(rs, maxRows);
				}
			}
			initGeneratedKeys(dataConnection, stmt);
		}
	} catch (SQLException e) {
		throw new cfmRunTimeException(catchDataFactory.databaseException(dataSourceName, "sql.execution", new String[] { com.naryx.tagfusion.cfm.tag.tagUtils.trimError(e.getMessage()) }, queryString, e));
	} finally {
		queryRun = true;
		closeConnections(dataConnection, stmt, rs);
	}
}
 
源代码20 项目: kareldb   文件: BaseJDBCTestCase.java
/**
 * Take the received Statement--on which a query has been
 * executed--and fetch all rows of all result sets (if any)
 * returned from execution.  The rows themselves are
 * discarded.  This is useful when we expect there to be
 * an error when processing the results but do not know
 * (or care) at what point the error occurs.
 *
 * @param st     An already-executed statement from which
 *               we get the result set to process (if there is one).
 * @param haveRS Whether or not the the statement's
 *               first result is a result set (as opposed to an
 *               update count).
 */
private static void fetchAndDiscardAllResults(Statement st,
                                              boolean haveRS) throws SQLException {
    ResultSet rs = null;
    while (haveRS || (st.getUpdateCount() != -1)) {
        // If we have a result set, iterate through all
        // of the rows.
        if (haveRS)
            JDBC.assertDrainResults(st.getResultSet(), -1);
        haveRS = st.getMoreResults();
    }
}