Alguém já viu isso?!?!

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

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

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

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

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]

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!

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?

[quote=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?[/quote]

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”.