public void queryTable(Pair<HTable, RowLock> lockPair, String tableName, String tableMeta,
            String rowkey, String strSelect,
            String strWhere, JTextPane textResult, QueryOption queryOption,
            OutputStreamWriter out) {
        BigBytesCache.clearCache();

        StyledDocument doc = textResult == null ? null : textResult.getStyledDocument();
        HTable hTable = null;
        ResultScanner rs = null;
        String trimmedRowkey = rowkey.trim();

        try {
            metaConfig = new HTableMetaConfig(tableName, tableMeta);

            writeHead(tableName, tableMeta, doc, out);

            long start = System.currentTimeMillis();
            writeQueryExpr(tableName, strSelect, strWhere, out, doc, trimmedRowkey, start);
            hTable = lockPair == null ? new HTable(HBaserConfig.config, tableName) : lockPair.getFirst();

            FilterList filterList = new FilterList();
            if (queryOption.isKeyOnlyFilter()) {
                filterList.addFilter(new KeyOnlyFilter());
            }
            rs = createResultScanner(strSelect, strWhere, trimmedRowkey, hTable, filterList);
            int lines = 0;
            for (Result rr = rs.next(); rr != null && lines < queryOption.getRowLimit(); rr = rs.next()) {
                showRow(++lines, doc, rr, queryOption, out);
            }

            long end = System.currentTimeMillis();
            insertString(doc, Dates.format(end) + " 共" + lines + "行, 用时"
                    + (end - start) / 1000. + "秒\n\n", JTextPaneStyle.FAMATTR, null);

            if (doc != null && textResult != null) {
                textResult.setCaretPosition(doc.getLength());
            }
        }
        catch (Exception e) {
            HBaserUtils.error(e);
        }
        finally {
            Ios.closeQuietly(lockPair == null ? hTable : null, rs);
        }
    }