public ResultSetPacket query(String queryString) throws IOException {
        QueryCommandPacket cmd = new QueryCommandPacket();
        cmd.setQueryString(queryString);
        byte[] bodyBytes = cmd.toBytes();
        PacketManager.writeBody(channel, bodyBytes);
        byte[] body = readNextPacket();

        if (body[0] < 0) {
            ErrorPacket packet = new ErrorPacket();
            packet.fromBytes(body);
            throw new IOException(packet + "\n with command: " + queryString);
        }

        ResultSetHeaderPacket rsHeader = new ResultSetHeaderPacket();
        rsHeader.fromBytes(body);

        List<FieldPacket> fields = new ArrayList<FieldPacket>();
        for (int i = 0; i < rsHeader.getColumnCount(); i++) {
            FieldPacket fp = new FieldPacket();
            fp.fromBytes(readNextPacket());
            fields.add(fp);
        }

        readEofPacket();

        List<RowDataPacket> rowData = new ArrayList<RowDataPacket>();
        while (true) {
            body = readNextPacket();
            if (body[0] == -2) {
                break;
            }
            RowDataPacket rowDataPacket = new RowDataPacket();
            rowDataPacket.fromBytes(body);
            rowData.add(rowDataPacket);
        }

        ResultSetPacket resultSet = new ResultSetPacket();
        resultSet.getFieldDescriptors().addAll(fields);
        for (RowDataPacket r : rowData) {
            resultSet.getFieldValues().addAll(r.getColumns());
        }
        resultSet.setSourceAddress(channel.getRemoteSocketAddress());

        return resultSet;
    }
public ResultSetPacket query ( String queryString ) throws IOException { QueryCommandPacket cmd = new QueryCommandPacket ( ) ; cmd . setQueryString ( queryString ) ; byte [ ] bodyBytes = cmd . toBytes ( ) ; PacketManager . writeBody ( channel , bodyBytes ) ; byte [ ] body = readNextPacket ( ) ; if ( body [ 0 ] < 0 ) { ErrorPacket packet = new ErrorPacket ( ) ; packet . fromBytes ( body ) ; throw new IOException ( packet + "\n with command: " + queryString ) ; } ResultSetHeaderPacket rsHeader = new ResultSetHeaderPacket ( ) ; rsHeader . fromBytes ( body ) ; List < FieldPacket > fields = new ArrayList < FieldPacket > ( ) ; for ( int i = 0 ; i < rsHeader . getColumnCount ( ) ; i ++ ) { FieldPacket fp = new FieldPacket ( ) ; fp . fromBytes ( readNextPacket ( ) ) ; fields . add ( fp ) ; } readEofPacket ( ) ; List < RowDataPacket > rowData = new ArrayList < RowDataPacket > ( ) ; while ( true ) { body = readNextPacket ( ) ; if ( body [ 0 ] == - 2 ) { break ; } RowDataPacket rowDataPacket = new RowDataPacket ( ) ; rowDataPacket . fromBytes ( body ) ; rowData . add ( rowDataPacket ) ; } ResultSetPacket resultSet = new ResultSetPacket ( ) ; resultSet . getFieldDescriptors ( ) . addAll ( fields ) ; for ( RowDataPacket r : rowData ) { resultSet . getFieldValues ( ) . addAll ( r . getColumns ( ) ) ; } resultSet . setSourceAddress ( channel . getRemoteSocketAddress ( ) ) ; return resultSet ; }
(Result Set Header Packet) the number of columns <br>
(Field Packets) column descriptors <br>
(EOF Packet) marker: end of Field Packets <br>
(Row Data Packets) row contents <br>
(EOF Packet) marker: end of Data Packets

@param queryString
@return
@throws IOException