Alguém já viu isso?!?!

6 respostas
W

Estou com uma aplicação rodando… tudo muito bonitinho, até que resolvi fazer uma consulta ao banco e dos 9 itens que armazeno no ResultSet 1 simplesmente não funciona!
A mensagem de erro que recebo é a seguinte:

[color=darkred]java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]ResultSet can not re-read row data for column 4.[/color]

O que está me tirando o juízo é o fato de isso acontecer depois que eu efetuo a leitura e manipulo(mostro na tela… etc) 8 das 9 informações que há no resultSet!

Alguém já viu isso?!?!

Ah! Estou rodando o java 1.6.0 e o tomcat 6.0 em um servidor windows XP e o banco(como se pode observar na msg de erro) é o SQLServer 2000

6 Respostas

J

Você lê o resultset e em seguida tenta lê-lo de novo?

De qualquer forma, posta o trecho aí pra gente dar uma olhada.

F

cara eu tinha um problema parecido assim no POSTGRES…
eu tinha gravando um campo nula… dai ele dava o erro na hora de mostrar na tela…

da uma olhadinha derrepente!!!

te mais

W

Tô colocando o trecho do código… na linha em negrito aparece o erro, mas ainda que eu a comente, nada depois daquela linha funciona!

Já verifiquei no banco, também estava desconfiando do dado… ele poderia estar nulo, mas está tudo ok!

[color=darkred] String codNoticia = request.getParameter(codNoticia);

String consulta = "SELECT * FROM noticia WHERE codNoticia = "+codNoticia;

ManipulaBanco mb = new ManipulaBanco();

ResultSet rs = null;		

rs = mb.consultaBanco(consulta);

try{

if(rs.next()){

String codVeiculo = rs.getString(codVeiculo);

String manchete = rs.getString(manchete);

String assunto = rs.getString(assunto);

String titulo = rs.getString(titulo);

String link = rs.getString(link);

String corpo = rs.getString(corpo);

String codArea = rs.getString(codArea);

String classe = rs.getString(classe);

String codJornalista = rs.getString(codJornalista);

String central = rs.getString(central);

String pagina = rs.getString(pagina);

String data = rs.getString(data);

}

} catch (Exception e) {out.print("
Erro na leitura! " + e);}[/color]
F

cara da uma olhadinha ve se nao ta gravando algum numero onde so pode letra…

e porque vc esta criando o Resultset nullo??
tenta so criar ele…

ate!

Lich_King

Em primeiro lugar use as tags [code] do fórum qndo postar código.

Por que if(rs.next()) ?? Faz um while(rs.next())....

Por q vc não está armazenando os dados do ResultSet numa Collection?

Y

Lich King:

Por que if(rs.next()) ?? Faz um while(rs.next())

Por q vc não está armazenando os dados do ResultSet numa Collection?

Ele não está armazenando em uma Collection pq o ResultSet só retorna um único registro, o que é dedutível pela montagem da instrução SQL usada: WHERE codNoticia = [X]

Uma vez que um ResultSet, ao ser iniciado, tem seu “ponteiro” posicionado Antes do primeiro registro, conclui-se que o método next() deverá posicionar o ponteiro no primeiro (e único) registro do ResultSet, retornando true, tornando o uso de um If mais útil que um While que, neste caso, só seria executado uma única vez.


Respondendo ao título do tópico: NÃO.
Como citado anteriormente, você deve verificar se o problemático campo da tabela não está com algum dado inválido. Mesmo que o problema não seja este, ainda recomendo-te analisar melhor os dados da tua tabela e usar tipos mais concisos, como por exemplo: tipo Integer para os campos “codVeiculo”, “codArea” e “codJornalista” e talvez tipo date para o campo “data”.

Criado 23 de março de 2007
Ultima resposta 24 de mar. de 2007
Respostas 6
Participantes 5