Armazenamento de imagens em um banco de dados

Pessoal tenho uma dúvida cruel. Preciso criar um banco de dados no mysql que guarde imagens de documentos digitalizados, para posterior consulta via aplicação, porém não sei por onde começar.

Alguém já fez algo similar que possa me ajudar?

Salve suas imagens em disco e guarde no banco apenas o caminho absoluto das mesmas. Ex : “C:\Pasta\imagem.jpg”

Abraços!

Para gravar imagens no banco você pode utilizar campos Blob.
O JDBC dá pleno suporte para isso, só dar uma pesquisada.

Quanto a sugestão do jorgeneto, é geralmente a solução mais adotada.

Só tenho algumas ressalvas:

  • Não grave o caminho absoluto.
    Grave um caminho relativo e monte o caminho completo com uma configuração exterior.

  • Não sei como é o suporte a Blob do Mysql.
    Mas em alguns bancos já vale a pena em algumas situações.
    Geralmente num banco de dados o acesso a dados é mais controlado que numa pasta.
    (Qualquer pessoa com direito poderia editar uma imagem por exemplo).

  • Colocando no banco, você tem um controle central e único dos seus dados.
    Ao deixar as imagens em separado, teria uma infra mais complexa.
    Backup, segurança, compartilhamentos.
    O banco de dados abstrai tudo isto para você num único lugar.

Bom dia a todos.

[quote=AbelBueno]Para gravar imagens no banco você pode utilizar campos Blob.
O JDBC dá pleno suporte para isso, só dar uma pesquisada.

Quanto a sugestão do jorgeneto, é geralmente a solução mais adotada.

Só tenho algumas ressalvas:

  • Não grave o caminho absoluto.
    Grave um caminho relativo e monte o caminho completo com uma configuração exterior.

  • Não sei como é o suporte a Blob do Mysql.
    Mas em alguns bancos já vale a pena em algumas situações.
    Geralmente num banco de dados o acesso a dados é mais controlado que numa pasta.
    (Qualquer pessoa com direito poderia editar uma imagem por exemplo).

  • Colocando no banco, você tem um controle central e único dos seus dados.
    Ao deixar as imagens em separado, teria uma infra mais complexa.
    Backup, segurança, compartilhamentos.
    O banco de dados abstrai tudo isto para você num único lugar.[/quote]

Ótima sugestão AbelBueno. Só para informar que o MySql já vem com campos BLOB, assim como o Firebird também já possuia e ainda possui, o único banco que não possui até agora este recurso é o PostgreSQL.

Se não me falhe a memória o Oracle também possui os campos BLOB (Binary Large Objects), porém ele é um banco de dados pessado, e para aplicações bem robustas.

As desvantagens de utilizar campos BLOB, como o próprio nome já diz, os campos Binary Large Objects são campos que precisam de uma API, para converter a imagem em dado binário e vice-versa, o JDBC do driver do respectivo banco já fornece esta API, entretanto, dados binários consumem memória e isto pode simplesmente inchar o seu banco de dados e comprometer um pouco a performance do mesmo, ao passo que se a imagem estiver em disco, voce só consumirá a memória do disco e não do banco, deixando o banco mais leve na performance.

Outra desvantagem dos campos Blobs e que uma intensa troca de conversão de binário para imagem e vice-versa, poderá acarretar perda de bytes e comprometer a resolução e visualização da imagem.

Um abraço.