Foxan
Maio 19, 2006, 11:02am
#1
galera to com esse erro “Invalid cursor state” quando tento fazer um select num banco sQL server??
alguma Ideia??
[code]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();
}[/code]
Falow!!!
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);
}
Foxan
Maio 19, 2006, 2:01pm
#3
thingol e fiz essa modificação mas o erro continua???
[code]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();
}[/code]
Falow!!1
Aham, confundi "it.next()" com "rs.next()", mas você sabe que isso acontece até nas melhores famílias
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);
}
}
Foxan
Maio 19, 2006, 2:57pm
#5
Que isso cara!!!
Voce ajudou pra caramba!!!
Vou testar e assim que conseguir posto o codigo pra todo mundo ver!!!
Falow!!
Foxan
Maio 19, 2006, 3:18pm
#6
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
http://www.guj.com.br/java.article.get.print.chain?article.id=110
Se nao for pedir muito da pra voce olhar so mais esse problema pra mim.
[code]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();
}[/code]
Obs: Eu tambem to procurando a resposta beleza!!1
Falow!!!
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.
Foxan
Maio 19, 2006, 4:31pm
#8
Essa list era a que eu ia inserir "Listavalidos "
Vou testar, mas acho que o erro e esse mesmo!!!
Falow!!!