Erro no select "Invalid cursor state"

7 respostas
F

galera to com esse erro "Invalid cursor state" quando tento fazer um select num banco sQL server??

alguma Ideia??

public void verificaCnpjCadastrado(Collection list) throws SQLException{
		Iterator it = list.iterator();
		String sql = ("Select idEmpresa from tblCadastranteDeEmpresa");
		conexaoSQLServer = con.conectarBancoSqlServer();
		stmt = conexaoSQLServer.createStatement();
		rs = stmt.executeQuery(sql);
		String cnpj=rs.getString("idEmpresa");
		Sindical_Bean beanInterno;
		
		while(it.hasNext()){
			beanInterno = (Sindical_Bean) it.next();
				if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
					listaCNPJCadastrado.add(cnpj);
				else	
					listaValidos.add(beanInterno);
					
		}
		
	rs.close();
	}

Falow!!!

7 Respostas

T

Neste ponto ainda não foi carregado nenhum registro (é isso que o "next" faz). Por isso ocorre o tal erro.

Faça isto:

String cnpj;
 		Sindical_Bean beanInterno;
 		
 		while(it.hasNext()){
                        cnpj = rs.getString("idEmpresa"); //<-- agora você pode pegar o campo no banco
 			beanInterno = (Sindical_Bean) it.next();
 				if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
 					listaCNPJCadastrado.add(cnpj);
 				else	
 					listaValidos.add(beanInterno);
 					
 		}
F

thingol e fiz essa modificação mas o erro continua???

public void verificaCnpjCadastrado(Collection list) throws SQLException{
		Iterator it = list.iterator();
		String sql = ("Select idEmpresa from tblCadastranteDeEmpresa");
		conexaoSQLServer = con.conectarBancoSqlServer();
		stmt = conexaoSQLServer.createStatement();
		rs = stmt.executeQuery(sql);
		String cnpj;
		Sindical_Bean beanInterno;
		
		while(it.hasNext()){
			cnpj=rs.getString("idEmpresa");
			beanInterno = (Sindical_Bean) it.next();
				if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
					listaCNPJCadastrado.add(cnpj);
				else	
					listaValidos.add(beanInterno);
					
		}
		
	rs.close();
	}

Falow!!1

T

Aham, confundi "it.next()" com "rs.next()", mas você sabe que isso acontece até nas melhores famílias :frowning:

if (rs.next()) {
 			cnpj=rs.getString("idEmpresa"); //<< aham - confundi "it.next()" com "rs.next())
 		while(it.hasNext()){
 			beanInterno = (Sindical_Bean) it.next(); 
 				if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
 					listaCNPJCadastrado.add(cnpj);
 				else	
 					listaValidos.add(beanInterno);
 					
 		}
                }
F

Que isso cara!!!
Voce ajudou pra caramba!!! :smiley: :smiley:
Vou testar e assim que conseguir posto o codigo pra todo mundo ver!!!

Falow!!

F

Thingol eu fiz a alteração e o problema de cursor se foi, mas apareceu um referente "ConcurrentModificationException" acho q isso sao threads, eu achei no google um tutorial com isso aki mesmo do guj, mas nao entendi muito bem
[url]http://www.guj.com.br/java.article.get.print.chain?article.id=110[/url]

Se nao for pedir muito da pra voce olhar so mais esse problema pra mim.

public void verificaCnpjCadastrado(Collection list) throws SQLException{
		Iterator it = list.iterator();
		String sql = ("Select idEmpresa from tblCadastranteDeEmpresa");
		conexaoSQLServer = con.conectarBancoSqlServer();
		stmt = conexaoSQLServer.createStatement();
		rs = stmt.executeQuery(sql);
		String cnpj;
		Sindical_Bean beanInterno;
		
		 if (rs.next()) {
  			cnpj=rs.getString("idEmpresa");
		while(it.hasNext()){
			
			beanInterno = (Sindical_Bean) it.next();
				if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
					listaCNPJCadastrado.add(cnpj);
				else	
					listaValidos.add(beanInterno);
					
		}
		}
	rs.close();
	}

Obs: Eu tambem to procurando a resposta beleza!!1
Falow!!!

T
if(beanInterno.getCnpj().equalsIgnoreCase(cnpj))
 					listaCNPJCadastrado.add(cnpj);
 				else	
 					listaValidos.add(beanInterno);

Por acaso “list” que você passou como parâmetro é uma dessas duas listas? Se for, lembre-se que quando você “anda” sobre a lista usando o iterador, não pode ao mesmo tempo adicionar (add) nela.

Isso não é coisa de threads.

F

Essa list era a que eu ia inserir "Listavalidos "

Vou testar, mas acho que o erro e esse mesmo!!!

Falow!!!

Criado 19 de maio de 2006
Ultima resposta 19 de mai. de 2006
Respostas 7
Participantes 2