Salvar Imagem no banco de dados

Uso o BD Firebird. Tenho uma tabela que contém um campo BLOB.

Como posso salvar uma imagem nesse campo? Preciso converter para bytes[] ? Qual a melhor maneira de se fazer isso?

E como posso fazer o processo inverso, ou seja, pegar a imagem salva no BD e mostrar a imagem na tela?

Se tiverem algum material para indicar.

Obrigado.

Rodrigo, o mais recomendável é que você salve as imagens em disco (desde que haja espaço) e salve o caminho no banco.
Pois a leitura de imagens, pode acarretar em lentidão no banco.

Mas eu preciso salvar no BD, pois é um sistema já existente que salva no BD a imagem, ai não posso salvar o caminho da iamgem.

Dá uma olhada neste link.

As imagens ocupam espaço tanto em disco como na BD. Além de que com as imagens em BD haverá apenas um único backup necessário e não vários.
Com as imagens em disco, ao passar do tempo é necessário manter uma árvore bem organizada dos ficheiros senão a lentidão na consulta é notória.
A performance será inclusivé tão boa ou melhor em Base de Dados do que em disco.

Consegui transformar o File em bytes[] assim:

private void setArquivo(File file) {
        try {
            int len = (int) file.length();
            byte[] buffer = new byte[len];
            FileInputStream inFile = null;

            inFile = new FileInputStream(file);
            inFile.read(buffer, 0, len);

            this.arquivo = buffer;
        } catch (FileNotFoundException ex) {
            throw new RuntimeException("Erro: " + ex.getMessage());
        } catch (IOException ex) {
            throw new RuntimeException("Erro: " + ex.getMessage());
        }
    }

E salvei assim:

preparedStatement.setBytes(9, sacCliente.getArquivo());

Como posso fazer o processo inverso?
Recupero o campo BLOB do BD, mas preciso transformá-lo em uma imagem de volta, para poder exibir esta imagem um um JFrame.