Converter conteúdo de campo Blob para String (Resolvido!)

Ae, pessoa, blz! Alguém sabe (ou já chegou a fazer algo semelhante) como eu consigo mandar para uma variável String um campo do banco de dados que está em formato BLOB?

Obrigado.

Qual banco?

É o Oracle, e eu sei que tem o campo CLOB, mas no banco tá Blob, e eu preciso recuperar o conteúdo texto dele. Eu posso até tentar salvar num arquivo e depois ler o conteúdo deste arquivo.

Eu consegui resolver o meu problema:

Blob blob=viewTabela.getBlob("DECRETO");
BufferedReader in = new BufferedReader(new InputStreamReader(blob.getBinaryStream()));			
String buf = in.readLine();			
System.out.println("-->"+buf);

Mas o problema é o tamanho que a variável String pode ter? Se eu tenho um campo muito grande (mesmo tendo só texto), pode ser que a String pegue apenas um pedaço dela (e isso não pode ocorrer).

Então vem duas perguntas (a primeira bem básica e a segunda bem mais difícil):

  1. qual o tamanho máximo (em bits ou caracteres) que uma variável String pode receber?

  2. Seria melhor eu usar StringBuffer? Se for, como eu poderia converter o BufferedReader para o StringBuffer?

Olha, eu acho que nao tem limites.
O tipo String, não é um array de chars?

Otimize utilizando leitura de bytes e não BufferReader.
Para JVM 1.5 troque a utilização de StringBuffer por StringBuilder.


Blob blob=viewTabela.getBlob("DECRETO");
InputStream in = blob.getBinaryStream();			
StringBuilder ret = new StringBuilder();
int lidos=0;
byte b = new b[2048];
String temp = null;
while ( (lidos=in.read(b)) != -1){
      temp = new String(b,0,lidos);
     ret.append(temp);
}

 System.out.println("-->"+ret.toString());

hashcode , muito obrigado! O seu exemplo também resolveu o problema do meu de não ler várias linhas (o meu só pegava a primeira).

Só não entendi a classe StringBuilder. Eu não cheguei a localizar ela no Deitel para analisar. Mas vou pesquisar o tipo dela.

StringBuilder é mais rápida pois não utiliza de métodos synchronized para efetuar os appends.

4 anos depois e ainda me ajudou muito =D
hehe

Valeu!!