def execute(qstr)
    check_closed

    stmt = @spool.take
    begin
      if stmt.execute(qstr)
        ResultSet.send(:new, stmt.getResultSet) { @spool.give stmt }
      else
        rset = stmt.getUpdateCount
        @spool.give stmt
        rset
      end
    rescue Exception => e
      @spool.give stmt
      raise
    end
  end
def execute(qstr)
    check_closed

    stmt = @spool.take
    begin
      if stmt.execute(qstr)
        ResultSet.send(:new, stmt.getResultSet) { @spool.give stmt }
      else
        rset = stmt.getUpdateCount
        @spool.give stmt
        rset
      end
    rescue Exception => e
      @spool.give stmt
      raise
    end
  end
Executes an SQL and returns the count of the update rows or a ResultSet object
 depending on the type of the given statement.
 If a ResultSet is returned, it must be enumerated or closed.
 @param [String] qstr SQL string
 @return [Fixnum|ResultSet]