Varchar de 8000 só retorna 4000

5 respostas
K

Galera,
Estou com o seguinte problema, executo uma procedure no SQLServer 2000 que retorna 8000 bytes no query analyzer, ao rodar no java só retorna 4000, vejam parte do código:

connection = this.createNewConnection();

callableStatement = connection.prepareCall("{CALL dbPortalSaude..PR_SEL_COMPS_SITE(?,?)}");

callableStatement.setInt(1, tipousuario);
callableStatement.registerOutParameter(2, java.sql.Types.LONGVARCHAR, 8000);
callableStatement.execute();

String XML = callableStatement.getString(2);


System.out.println(XML.length()); // só retorna 4000

alguém já passou por isso ou sabe o que pode estar acontecendo?

[]s

5 Respostas

T

Tem cara de ser alguma coisa com o seu driver, já que está retornando muitos dados em uma query. Qual você está usando, o JTDS ou o da Microsoft?

Rafael_Nunes

Caso eu não esteja enganado, o drive JDBC só retorna até 4 mil caracteres. Maior que isso você vai precisar usar um CLOB.

K

Microsoft SQL Server JDBC Driver SP3

K

Rafael Nunes:
Caso eu não esteja enganado, o drive JDBC só retorna até 4 mil caracteres. Maior que isso você vai precisar usar um CLOB.

vlw, vou tentar aki pra ver no que dá.

T

O que dá para chutar é que para o driver da Microsoft ambos os tipos (NVARCHAR e VARCHAR) são tratados da mesma maneira.

(Obviamente poderíamos tentar descompilar o driver já que é 100% java mas, para começar, estaríamos violando a licença…)

Como o campo NVARCHAR pode ter no máximo 4000 caracteres (limitação do banco), ele deve estar achando que um VARCHAR também pode ter no máximo 4000 caracteres…

Talvez o JTDS também tenha uma limitação dessa, mas não sei exatamente onde. Só testando (não vi se isso aparece no FAQ, por exemplo; ele só menciona que se você usar o protocolo antigo, compatível com o SQL 6.5, campos IMAGE (BLOBs em Java ou Oracle) podem ter no máximo 4000 bytes. Mas para usar o protocolo antigo é necessário ter uma string de conexão especial.

Criado 19 de maio de 2005
Ultima resposta 19 de mai. de 2005
Respostas 5
Participantes 3