Exibir em um JTable uma imagem BLOB de um banco de dados MYSQL

Olá, galera.
Sou novo no Forum e iniciante em Java.

Estou desenvolvendo um aplicativo pelo NetBeans e usando um DB MySQL para armazenar meus dados.
Uma das entidades possui um campo Blob, que armazeno um ícone simples, pequeno. Inseri todos os dados na tabela pelo próprio MySQL
e quero exibí-los em uma JTable na minha aplicação, porém quando faço a leitura da tabela no DB, a imagem não aparece, deixando apenas uma lista de caracteres (a figura abaixo mostra o resultado).
Já li vários tópicos com problemas parecidos, alguns até solucionados, porém tentei fazer adaptações no meu código e nenhuma delas deu resultado.

Alguém já passou por algo semelhante?

Um tópico que apresentava um problema parecido foi ESTE , mas tentei adaptar todos os códigos que ele disponibilizou na solução e mesmo assim (não se se por “cabacice” minha ou se porque realmente algo está MUITO errado) não tive sucesso em nenhuma delas.
Como tem muita gente aqui no Forum que realmente manja da arte, vou postar o que tenho de código (mesmo errado) até agora:
ImageFormatter.java

package controle;

import com.towel.bean.Formatter;
import javax.swing.ImageIcon;

/**
 * Esta classe é responsável pelas decodificações das imagens a serem manipuladas.
 * 
 * @author Xuxão
 * 11/02/2014
 */
public class ImageFormatter implements Formatter{

    /**
     * Converte o objeto passado como parâmetro em um vetor de bytes,
     * transformando a sequência de bytes em um novo objeto ImageIcon
     * @param o
     * @return ImageIcon
     */
    @Override
    public ImageIcon format(Object o) {
        byte[] imageInByte = (byte[])o;
        return new ImageIcon(imageInByte);
    }

    /**
     * Analisa o objeto passado como parâmetro e devolve um objeto ImageIcon
     * @param o
     * @return ImageIcon
     */
    @Override
    public ImageIcon parse(Object o) {
        byte[] imageInByte = (byte[]) o;
        return new ImageIcon(imageInByte);
    }

    @Override
    public String getName() {
        return "ImageFormatter";
    }
    
}

ImageCellRendere.java

[code]package modelo;

import javax.swing.ImageIcon;
import javax.swing.table.DefaultTableCellRenderer;

/**
*

  • @author Xuxão

  • 11/02/2014
    */
    public class ImageCellRenderer extends DefaultTableCellRenderer{

    @Override
    protected void setValue(Object value){
    ImageIcon icon = (ImageIcon) value;
    setIcon(icon);
    }
    }[/code]

TelaTabela.java (JFrame)

[code]package visao;

import controle.ConectaBD;
import java.sql.Blob;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import modelo.ModeloTabelas;
import modelo.ModeloTime;

/**

  • Tela com a tabela oficial da Copa 2014.

  • Traz as equipes separadas por grupos na primeira fase e, após

  • a fase classificatória, preenche automaticamente cada fase, conforme

  • os resultados dos jogos consequentes.

  • @author Xuxão

  • 05/02/2014
    /
    public class TelaTabela extends javax.swing.JFrame {
    // instancia-se um objeto ConectaBD para o preenchimento das tabelas
    ConectaBD conectaTime = new ConectaBD();
    // instancia-se um objeto ModeloTime:
    ModeloTime time = new ModeloTime();
    /
    *

    • Creates new form TelaTabela
      */
      public TelaTabela(){
      initComponents();
      preencherTabelaGrupos(“SELECT * FROM time WHERE grupo = ‘A’ ORDER BY p DESC”, tabelaTimesA1);
      }


    }//

    /**************** PREENCHIMENTO DAS TABELAS DE GRUPOS *********************/

    // o método recebe um comando SQL e o nome de uma tabela como parâmetros:
    public void preencherTabelaGrupos(String SQL, JTable tabela){
    // instancia-se uma nova ArrayList
    ArrayList dados = new ArrayList();
    // instancia-se uma nova lista de colunas:
    String[] Colunas = new String[]{“PAÍS”,“P”,“V”,“E”,“D”,“GP”,“GC”,“SG”};

     try {// conecta o DB:
         conectaTime.conectar();
         // passa o comando SQL usado como parâmetro:
         conectaTime.executarSQL(SQL);        
         // posiciona no primeiro registro:
         conectaTime.mostraResultado.first();
         do{// para cada registro encontrado:
         // instancia-se um objeto Blob:
             Blob imgBlob = conectaTime.mostraResultado.getBlob("bandeira");
             
         // preenche as linhas com os dados:
         dados.add(new Object[]{
         //    conectaTime.mostraResultado.getBlob("bandeira")+" "+
             conectaTime.mostraResultado.getString("nomePais"),
             conectaTime.mostraResultado.getInt("p"),
             conectaTime.mostraResultado.getInt("v"),
             conectaTime.mostraResultado.getInt("e"),
             conectaTime.mostraResultado.getInt("d"),
             conectaTime.mostraResultado.getInt("gP"),
             conectaTime.mostraResultado.getInt("gC"),
             conectaTime.mostraResultado.getInt("sG")});
     }while(conectaTime.mostraResultado.next()); // enquanto existir registros
     } catch (SQLException ex) {
         JOptionPane.showMessageDialog(rootPane, "Falha ao carregar dados.\nErro: "+ex.getMessage());
     }
     // instancia-se um objeto ModeloTabelas...
     ModeloTabelas modelo = new ModeloTabelas(dados, Colunas);
     // e incorpora-se o modelo na tabela do formulário
     tabela.setModel(modelo);
     
     // determina-se o tamanho (em pixels) e o redimensionamento de cada uma das colunas:
     // coluna do nome e da bandeira da seleção:
     tabela.getColumnModel().getColumn(0).setPreferredWidth(230);
     tabela.getColumnModel().getColumn(0).setResizable(false); // não se altera o tamanho
             
     // coluna dos pontos:
     tabela.getColumnModel().getColumn(1).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(1).setResizable(false); // não se altera o tamanho
     // coluna das vitórias:
     tabela.getColumnModel().getColumn(2).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(2).setResizable(false); // não se altera o tamanho
     // coluna dos empates:
     tabela.getColumnModel().getColumn(3).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(3).setResizable(false); // não se altera o tamanho
     // coluna das derrotas:
     tabela.getColumnModel().getColumn(4).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(4).setResizable(false); // não se altera o tamanho
     // coluna dos gols Pró:
     tabela.getColumnModel().getColumn(5).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(5).setResizable(false); // não se altera o tamanho
     // coluna dos gols Contra:        
     tabela.getColumnModel().getColumn(6).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(6).setResizable(false); // não se altera o tamanho
     // coluna do saldo de Gols:
     tabela.getColumnModel().getColumn(7).setPreferredWidth(30);
     tabela.getColumnModel().getColumn(7).setResizable(false); // não se altera o tamanho
     
     // determina a localização da tabela no formulário:
     tabela.getTableHeader().setReorderingAllowed(false); // não pode mudar de lugar
     // determina o redimensionamento da tabela como um todo
     tabela.setAutoResizeMode(tabela.AUTO_RESIZE_OFF); // não pode redimensionar a tabela
     // permite a seleção de um único elemento da tabela
     tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     
     
     conectaTime.desconectar();
    

    }

    /**

    • @param args the command line arguments
      */
      public static void main(String args[]) {

      }
      });
      }

    // End of variables declaration
    }[/code]

Não sei se fui claro, mas espero que alguém consiga entender e me ajudar.
Abraços.