Como inserir uma String imensa em campo clob em banco oracle

9 respostas
D

Por favor me ajudem

Como inserir uma String imensa em campo clob em banco oracle, se eu passo como string com pouco dados ele até insere, mas quando a String é muito grande ele me retorna

Data size bigger

java.sql.SQLException: Data size bigger than max size for this type

Valeu obrigado, qualquer dica é válida.

9 Respostas

AndreNunes

tente criar um BLOB e aconselhavel criar um BLOB.

Rafael_Steil

dbarreto:
Por favor me ajudem

Como inserir uma String imensa em campo clob em banco oracle, se eu passo como string com pouco dados ele até insere, mas quando a String é muito grande ele me retorna

Data size bigger

java.sql.SQLException: Data size bigger than max size for this type

Valeu obrigado, qualquer dica é válida.

Um Clob eh, por definicao, uma “string imensa” ja. Provavelmente voce esta fazendo algum bind errado, ou algum outro tipo de bug no seu codigo. Como voce esta manipulando esta parte?

Rafael

foia

pôe a string num envelope e passa por baixo da porta !! :mrgreen: :mrgreen: :mrgreen:

vc usa setString() ou setBlob() no Statement ?!

D

Segue um trecho do que estou fazendo

try
	{
		PreparedStatement myStatement = myConnection.prepareStatement("INSERT INTO TABELA(ID,NOME,SOBRENOME,TEXTOCLOB)" +
  " VALUES(SEQ_ID.NEXTVAL, ?, ?, ?)");

myStatement.setString(1, nome);
myStatement.setString(2, sobrenome);
myStatement.setString(3, TextoClob);


		myStatement.executeUpdate();
		myStatement.close();

  	}
  	catch (SQLException exc)
T

http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/LOBSample/Readme.html

Dica: Ponha um bookmark no seu browser para a Oracle Technology Network ( http://www.oracle.com/technology/index.html ). Você vai precisar muito disso.

Resumindo: você tem de inserir o registro com CLOBs vazios. Então você tem de selecionar o registro recém inserido, obter o CLOB, do CLOB obter uma OutputStream, e gravar os dados (argh).

D

Mas o que tenho que no campo é uma string e não OutputStream, e mais se eu passo uma string curta ele insere é só quando ultrapassa algum número de caracter.
A String e a limitação não é do String porque eu estou exibindo ela e está completa. o erro que dá é

Data size bigger

java.sql.SQLException: Data size bigger than max size for this type

T

Eu sei, já tive esse problema também (Oracle, sempre a Oracle… :stuck_out_tongue: ), por isso é que lhe passei esse link. Acima de um determinado tamanho, usar setString não funciona, e setClob também não funciona direito com algumas versões do driver da Oracle (não sei se com o thin driver ou com o OCI).
O problema que tive foi um pouco pior, porque eu tive de usar uma conexão de um DataSource (não tinha uma conexão direta ao banco). Eu tive de fazer umas gambiarras do tipo “if (servidor é JBoss) { faz um cast do DataSource para uma classe do JBoss, que expõe a conexão nativa; usar a conexão nativa; etc. }.” Muito chato.

D

E o que será que vou ter que fazer, procurar outro driver?

T

Não, o que lhe recomendo é ler o tal artigo. Tem uma receitinha de bolo lá, não se desespere :mrgreen:

Criado 20 de junho de 2005
Ultima resposta 21 de jun. de 2005
Respostas 9
Participantes 5