Re:NegativeArraySizeException ao inserir em campo bytea no PostGres

4 respostas
fiaux

Quando chega na lnha pstmt.setBinaryStream(1, relatorio.getImgRelatorio(), tamanho); como estão as variáveis? Qual o valor de tamanho, e o que é retornado em relatorio.getImgRelatorio?

public class NegativeArraySizeException
extends RuntimeException

Thrown if an application tries to create an array with negative size.


Acho que tem algum valor estranho entre esses dois que você passa como parâmetro.

4 Respostas

B

Esse arquivo por acaso tem mais de 2GB?

G

Fala pessoal,

Seguinte, possuo uma tabela que possui um campo do tipo bytea. Esse campo recebe valores grandes, como CLOB ou BLOB.
Estou passando para o meu PreparedStatement, através do método ‘setBinaryStream’, um inputStream no segundo argumento e no terceiro, o tamanho do inputStream.
Nesse momento, recebo a exceção NegativeArraySizeException.

Alguém sabe o que seria isso? Aparentemente não há nada de errado!

O código é o seguinte:

int tamanho = 0;

relatorio.getImgRelatorio().reset();

while ((relatorio.getImgRelatorio().read())!=-1)

tamanho++;
String query = update tabela

set imgrelatorio = ?, hashimgrelatorio = ? where idformulariopromotor = ?;

Connection conexao = con.getConnection();

PreparedStatement pstmt = conexao.prepareStatement(query);

pstmt.setBinaryStream(1, relatorio.getImgRelatorio(), tamanho);

neste exato momento recebo a exceção.

Alguém poderia dar uma mão??

Obrigado, Guilherme

G

Problema solucionado!
Não tem mais de 2GB.
Precisava dar um reset no inputStream, já que o percorro antes.

Mas estou com outro problema. Estou fazendo exatamente a mesma coisa, mas nada é inserido no banco!!
Não recebo exceção, simplesmente a aplicação é executada e nada vai ao banco. Nao é problema de conexão pois nessa mesma transação faço um UPDATE em outra tabela e ai os valores são atualizados.

Lembro que o campo no banco é bytea e o tipo de dado que estou tentando inserir é byteArrayInputStream.

Obrigado, guilherme

G

Novo problema também solucionado!
Estava tentando inserir um inputStream vazio no banco!

obrigado, guilherme

Criado 8 de maio de 2008
Ultima resposta 9 de mai. de 2008
Respostas 4
Participantes 3