Tamanho dos dados maior que o tamanho máximo para este tipo - Oracle

7 respostas
P

Pessoal,

ao tentar gravar um texto (aproximadamente 7500 caracteres) no meu banco de dados tenho o seguinte erro:
Tamanho dos dados maior que o tamanho máximo para este tipo

O driver que estou usando é compátivel com meu BD.
No caso o Banco é o Oracle 8.0.5 e o driver é o classes12.jar do Oracle 8.1.7 que é a versão mais antiga do driver que existe.

O campo no BD é do tipo Long e o no Java é String.

Já testei em um banco Oracle 9 com o driver para o Oracle 9 e não funcionou.

Não tenho como mexer no banco.

Estou usando Hibernate com annotation JPA.

Alguém tem alguma solução?

Grato,
Pedro Nogueira.

7 Respostas

D

Com quanto caracteres está definido o campo na tabela? Se for menos de 7.500, você terá de truncar (cortar) o texto a ser gravado.

Tente usar o driver ojdb14.jar ou o ojdbc6.jar (p/ java 6).

Boa sorte.

F

pedrohnog:

O campo no BD é do tipo Long e o no Java é String.

Gravar string numa coluna long é meio complicado.

D

A contrário do que possa parecer, no ORACLE, o tipo LONG se refere a:

F

poxa… isso eu não sabia.
No Oracle 8 não tinha varchar2?

D

[color=red]A bigger version the VARCHAR2[/color]

P

Daniel,

vou fazer uns testes aqui e falo se funcionou.

Pedro Nogueira.

P

Daniel,

tive que cuidar de outros projetos e acabei demorando pra poder voltar a ver esse problema, mas vamos lá.
Tentei a dica que você deu sobre trocar o drive e não funcionou, mas consegui uma solução.

Fiz dessa maneira pra gravar:

public static void gravar(String texto, String codigo) throws SQLException {
        Connection conn = null;
        ByteArrayInputStream bs = null;
        PreparedStatement ps = null;
        try {
            bs = new ByteArrayInputStream(texto.getBytes());
            conn = DriverManager.getConnection("jdbc:oracle:thin://localhost:1521:ORCL", "user", "pass");
            ps = conn.prepareStatement("UPDATE DOCTOTXT SET TEXTO = ? WHERE CODIGO = ?");
            ps.setAsciiStream(1, bs, texto.length());
            ps.setString(2, codigo);
            ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            conn.close();
        }
    }

Valeu pela ajuda e fica a dica pra quem estiver com o mesmo problema.

Abraços.

Criado 25 de maio de 2009
Ultima resposta 25 de jun. de 2009
Respostas 7
Participantes 3