Seja bem vindo ao Fórum do JavaFree.org
Aqui você irá encontrar respostas para TUDO o que você precisa sobre java.
Deseja participar? Crie sua conta ou efetue seu login
Este tutorial apresenta de forma sucinta como manipular campos dos tipos BLOB e CLOB utilizando o driver Oracle JDBC (ojdbc14.jar).
Em linhas gerais, a prova de conceito possui os seguintes passos:
1) ler um arquivo texto (grande) e um arquivo binário (imagem);
2) inserir o conteúdo destes arquivos em um registro no banco de dados utilizando JDBC;
3) selecionar o registro do banco e ler o conteúdo dos campos BLOB e CLOB utilizando JDBC;
4) gerar um arquivo binário com o conteúdo do campo BLOB e um arquivo texto com o conteúdo do campo CLOB;
5) certificar que o conteúdo dos arquivos gerados é idêntico ao conteúdo dos arquivos originais;
A preparação do ambiente para a prova de conceito tem os seguintes passos:
1) criação da tabela de testes com os campos BLOB e CLOB, segue definição:
2) criação do arquivo binário (teste.jpg)
3) criação do arquivo texto (teste.txt)
PS: Não é necessário preparar manualmente o ambiente, pois o programa de teste executa os passos descritos acima.
Inserindo registro
Para criar um registro, primeiramente deve ser inserido um registro com os campos CLOB e BLOB vazios:
Depois deve-se selecionar o registro e efetivamente inserir o conteúdo dos campos CLOB e BLOB, para isto o registro é bloqueado com a cláusula "for update":
Segue o código para atribuir o conteúdo do arquivo binário para o campo BLOB, nota-se que uma linha é específica para o driver Oracle, para outros drivers utilizar a linha comentada:
Segue o código para atribuir o conteúdo do arquivo texto para o campo CLOB, nota-se que uma linha é específica para o driver Oracle, para outros drivers utilizar a linha comentada:
Basta comitar a transação e fechar o cursor:
Selecionando registro
O próximo objetivo da prova de conceito é selecionar o registro inserido e criar um novo arquivo binário com o campo BLOB e outro para o campo CLOB.
Primeiro é selecionado o registro, um "select" normal:
Depois é criado um novo arquivo binário com o conteúdo do campo BLOB:
Depois é criado um novo arquivo texto com o conteúdo do campo CLOB:
Para finalizar é fechado o cursor:
Validando arquivos
Para validar a prova de conceito é feito uma comparação entre os arquivos originais e os arquivos novos, segue código que verifica se o conteúdo de dois arquivos são iguais:
Primeiro verifica os arquivos binários:
E por fim, verifica os arquivos textos:
Well, done !!!
Giovane Roslindo Kuhn é bacharel em Ciências da Computação pela Universidade Regional de Blumenau. Atuando profissionalmente no Projeto Jakare da empresa Senior Sistemas, que consiste em um framework para desenvolvimento de aplicações J2EE e é reponsável pelos projetos Baba XP, SnailDB e Apollo. Incentivador do uso de metodologias ágeis de desenvolvimento, especialmente XP e desing patterns.
ei kuhn, esse tutorial q vc fez... me diz uma coisa...
vc vai colocar isso no seu curriculum como 'artigos publicados' ????
pretende fazer mestrado ou algo do tipo?
abracao
Opa... na real estes tipos de artigos nem contam para a carreira acadêmica... escrevo estes tipos de artigos para auxiliar a comunidade Java e nada mais =DDD !!!
Quanto ao mestrado, tem fortes pretensões !!!! Vamos ver se final do ano rola !!!
Eh... acho difícil artigos deste gênero auxiliarem o seu chefe para ingressar num mestrado !!! Mas sem sobra de dúvida auxiliariam e muito a galera Java !!!
A pergunta vai parecer meio boba, mas tô me batento aqui. Se o campo CLOB não for um arquivo ou uma imagem, se for simplemente uma string gigantesca, um texto, eu até consigo pegar o campo clob e transformar de volta a string, mas quando servidor é linux essa string vem com caracteres estranhos no lugar da acentução ou cedilha, engraçado que o servidor no windows não acontece isso.
Vocês podem me dar uma luz? _________________JavaFree.org
Tenho um campo Blob que gravo um objeto tipo HashMap, mas quando vou tentar recupera-lo da minha base de dados ele volta como um array de bytes, como faço pra converter devolta em um HashMap.
Agradecido,
André Valdestilhas _________________Andre Valdestilhas
Cara deixa eu explicar o que eu quero fazer: eu tenho um site onde tem notícias, como o corpo desta notícia tem o tamanho maior que 4.000 caracteres tive que optar pelo campo CLOB, porém tenho um número grande de jornalistas na qual podem inserir notícias ao mesmo tempo...
Eu sou iniciante em java e to completamente perdido em relação a isto.
Eu preciso que os dados do formulário, inclusive a notícia tamanho família, vá para o banco de dados...
Eu consegui inserir dados neste campo, apenas utilizando um arquivo texto com o conteúdo, mas não posso depender de um arquivo, pois podem haver mais de um jornalista naquele mesmo instante cadastrando uma notícia... E estas não podem se conflitar e nem gerar sobrecarregamento de E/S...
O que preciso não é nada de outro mundo, mas tô emperrado nisto e não consigo solucionar... please, help-me! _________________"Não concordo com o que dizes, mas defendo até a morte o direito de o dizeres" Voltaire
Tenho um campo Blob que gravo um objeto tipo HashMap, mas quando vou tentar recupera-lo da minha base de dados ele volta como um array de bytes, como faço pra converter devolta em um HashMap.
Agradecido,
André Valdestilhas
André, recomendo você utilizar a serialização do Java para colocar o HashMap no campo BLOB do banco, para isto utilize a classe ObjectOutputStream, por exemplo:
Para ler utilize classe ObjectInputStream, por exemplo:
Eu não testei estes dois códigos, mas qq coisa só berra novamente, flow !
Cara deixa eu explicar o que eu quero fazer: eu tenho um site onde tem notícias, como o corpo desta notícia tem o tamanho maior que 4.000 caracteres tive que optar pelo campo CLOB, porém tenho um número grande de jornalistas na qual podem inserir notícias ao mesmo tempo...
Eu sou iniciante em java e to completamente perdido em relação a isto.
Eu preciso que os dados do formulário, inclusive a notícia tamanho família, vá para o banco de dados...
Eu consegui inserir dados neste campo, apenas utilizando um arquivo texto com o conteúdo, mas não posso depender de um arquivo, pois podem haver mais de um jornalista naquele mesmo instante cadastrando uma notícia... E estas não podem se conflitar e nem gerar sobrecarregamento de E/S...
O que preciso não é nada de outro mundo, mas tô emperrado nisto e não consigo solucionar... please, help-me!
Gustavo,
Não precisas criar um arquivo e depois ler deste arquivo, podes trabalhar diretamente com String que vem da sua tela de cadastro.
Para inserir o valor no campo CLOB, no lugar da classe FileReader, utilize a classe StringReader.
Para ler o valor do campo CLOB para uma String, no lugar da classe FileWriter, utilize a classe StringWriter e depois o método getBuffer().
A pergunta vai parecer meio boba, mas tô me batento aqui. Se o campo CLOB não for um arquivo ou uma imagem, se for simplemente uma string gigantesca, um texto, eu até consigo pegar o campo clob e transformar de volta a string, mas quando servidor é linux essa string vem com caracteres estranhos no lugar da acentução ou cedilha, engraçado que o servidor no windows não acontece isso.
Vocês podem me dar uma luz?
Achilles,
Este problema normalmente ocorre devido problemas de configuração do "charset" do seu banco de dados. Leia a respeito de "charset" ou "character encoding".
QQ novidade posta pra gente aí !!! _________________
Pessoal, consegui fazer o Upload gravar no campo Blob, mas to com 2 probleminhas:
1 - nao está fazendo upload de arquivos maiores que 4kb (mesmo eu tendo alterado no file.setSizeMax(50*1024*1024); caso o arquivo tenha 5kb por exemplo, já não faz upload informando a seguinte exceção "tamanho dos dados maior que o tamanho máximo para este tipo: "tamanho do arquivo"";
2 - como fazer a recuperação desse arquivo que foi gravado como array de bytes e mostralo no formao original??;
Alguém tem alguma ideia de como fazer ele aceitar arquivos de qualquer tamanho e recuperar o arquivo no BD?????
obs:já coloquei (-1) no lugar do 50*1024*1024 e continua a mesma coisa!!
Pessoal, consegui fazer o Upload gravar no campo Blob, mas to com 2 probleminhas:
1 - nao está fazendo upload de arquivos maiores que 4kb (mesmo eu tendo alterado no file.setSizeMax(50*1024*1024); caso o arquivo tenha 5kb por exemplo, já não faz upload informando a seguinte exceção "tamanho dos dados maior que o tamanho máximo para este tipo: "tamanho do arquivo"";
2 - como fazer a recuperação desse arquivo que foi gravado como array de bytes e mostralo no formao original??;
Alguém tem alguma ideia de como fazer ele aceitar arquivos de qualquer tamanho e recuperar o arquivo no BD?????
obs:já coloquei (-1) no lugar do 50*1024*1024 e continua a mesma coisa!!
eu estou com o mesmo problema do marceloplis acima, mas já desisti de fazer do jeito simples que estava fazendo. (usando setBytes direto sem inserir primeiro um campo vazio).
o meu problema de fazer igual ao seu tutorial acima é já na consulta de seleção do registro, onde eu quero selcionar os campos blob.
a consulta é equivalente a esta sua:
ResultSet rs = stmt.executeQuery("select cadastro, imagem, texto from teste where cadastro = 1 for update");
essa consulta retorna null. Já coloquei diretamente a consulta sql usando o sql tools ou o squirrel, e a mensagem que eles dão é ORA-01002: extração fora de seqüência
voce sabe o que é isso? quando eu tiro o "for update" da consulta, ai nao dá problema.
outra pergunta, no meu campo blob vai ter só arquivo .doc, .pdf, .rtf. vc recomenda alterar para Clob? se eu conseguir passar por esse erro, vou ter outras perguntas, mas por enquanto fica só nessas
eu consegui resolver. o problema era so o autocommit que nao tava setado pra falso. e é isso que bloqueia a consulta, ate vc dar o commit manualmente, depois de mandar o arquivo
Experimentei este método para inserir uma imagem em um blob e apareceu-me o seguinte erro:
java.lang.NullPointerException
Este é o código que estou a usar:
Alguem sabe qual e o problema?
Obrigado
Luís Matos
Em qual linha que ocorreu o NPE ??? Tem certeza que o existe um registro com imagem no banco ??? Caso não tenha, pode estar retornando nulo o código abaixo:
Estou precisando ler um arquivo blob do oracle e gravar no disco...
O arquivo é do tipo "txt".
Atenciosamente,
Gerfferson Santos.
Ué, o tutorial não te ajudou ??? Leia com atenção pq ele faz exatamente isso, ler um clob do banco e criar um arquivo txt e ler um blob e criar um jpg.
Gostaria de saber o tamanho em bytes do tipo blob.....alguem poderi me ajudar?
tipo...um char é 1 byte.....um int são 4 bytes....
o tipo blob é quanto????
Oi,
o BLOB tem o tamanho que voce quiser
falando sério, o BLOB tem tamanho variável, dependendo do que estiver armazenado nele e da implementação do banco de dados. É semelhante a um String.
documentação do BLOB no MySQL
...A BLOB is a binary large object that can hold a variable amount of data...
[]] _________________ Nome real: Carlos F. Heuberger
Removeram os meus direitos de administrador e moderador - sem aviso, pela segunda vez - contate o ombudsman (?), a equipejavafree ou a "alta gerência" se necessário - Que pena... que terminou dessa maneira!
Galera, se em vez de imagens eu preciso armazenar videos, pois sera uma pagina com varios videos pequeno(quadros) e qdo eu clicar vai rodar em tamanho maior...
Pessoal, usando um map com os campos vindos de um formulário preencho um relatório, salvo em pdf e gravo esse pdf num campo blob na tabela.
A pergunta é: Tem como recuperar o conteúdo dos campos que eu preenchi o pdf gravado ? _________________Carlos Lindberg
Analista de Sistemas na SEFAZ/SE
brainPosts:654
Manipulando campos BLOB e CLOB com JDBC
Por: Giovane Roslindo Kuhn
Este tutorial apresenta de forma sucinta como manipular campos dos tipos BLOB e CLOB utilizando o driver Oracle JDBC (ojdbc14.jar).
Em linhas gerais, a prova de conceito possui os seguintes passos:
1) ler um arquivo texto (grande) e um arquivo binário (imagem);
2) inserir o conteúdo destes arquivos em um registro no banco de dados utilizando JDBC;
3) selecionar o registro do banco e ler o conteúdo dos campos BLOB e CLOB utilizando JDBC;
4) gerar um arquivo binário com o conteúdo do campo BLOB e um arquivo texto com o conteúdo do campo CLOB;
5) certificar que o conteúdo dos arquivos gerados é idêntico ao conteúdo dos arquivos originais;
Para o entendimento deste tutorial é necessário algum conhecimento em JDBC e SQL, para isto veja em:
Acessando banco de dados em Java (PARTE 1)
Acessando banco de dados em Java (PARTE 2)
Acessando banco de dados em Java (PARTE 3)
Let's play !!!
Preparando o ambiente
A preparação do ambiente para a prova de conceito tem os seguintes passos:
1) criação da tabela de testes com os campos BLOB e CLOB, segue definição:
2) criação do arquivo binário (teste.jpg)
3) criação do arquivo texto (teste.txt)
PS: Não é necessário preparar manualmente o ambiente, pois o programa de teste executa os passos descritos acima.
Inserindo registro
Para criar um registro, primeiramente deve ser inserido um registro com os campos CLOB e BLOB vazios:
Depois deve-se selecionar o registro e efetivamente inserir o conteúdo dos campos CLOB e BLOB, para isto o registro é bloqueado com a cláusula "for update":
Segue o código para atribuir o conteúdo do arquivo binário para o campo BLOB, nota-se que uma linha é específica para o driver Oracle, para outros drivers utilizar a linha comentada:
Segue o código para atribuir o conteúdo do arquivo texto para o campo CLOB, nota-se que uma linha é específica para o driver Oracle, para outros drivers utilizar a linha comentada:
Basta comitar a transação e fechar o cursor:
Selecionando registro
O próximo objetivo da prova de conceito é selecionar o registro inserido e criar um novo arquivo binário com o campo BLOB e outro para o campo CLOB.
Primeiro é selecionado o registro, um "select" normal:
Depois é criado um novo arquivo binário com o conteúdo do campo BLOB:
Depois é criado um novo arquivo texto com o conteúdo do campo CLOB:
Para finalizar é fechado o cursor:
Validando arquivos
Para validar a prova de conceito é feito uma comparação entre os arquivos originais e os arquivos novos, segue código que verifica se o conteúdo de dois arquivos são iguais:
Primeiro verifica os arquivos binários:
E por fim, verifica os arquivos textos:
Well, done !!!
Giovane Roslindo Kuhn é bacharel em Ciências da Computação pela Universidade Regional de Blumenau. Atuando profissionalmente no Projeto Jakare da empresa Senior Sistemas, que consiste em um framework para desenvolvimento de aplicações J2EE e é reponsável pelos projetos Baba XP, SnailDB e Apollo. Incentivador do uso de metodologias ágeis de desenvolvimento, especialmente XP e desing patterns.
_________________
brainPosts:654
Segue fonte completo:
_________________
vfpampPosts:6098
Agiliza um pouco ae
_________________Vitor Pamplona
http://vitorpamplona.com
@vitorpamplona
bbPosts:125
ei kuhn, esse tutorial q vc fez... me diz uma coisa...
vc vai colocar isso no seu curriculum como 'artigos publicados' ????
pretende fazer mestrado ou algo do tipo?
abracao
_________________Sun Certified Programmer
.:. Up The |rons .:.
brainPosts:654