public void autaliza(){
Scanner ler = new Scanner(System.in);
conectaBancoDAO carrega = new conectaBancoDAO();
Connection con = null;
Statement stm = null;
ResultSet rs = null;
boolean consulta = true;
try{
con = carrega.fazConexao();
stm = con.createStatement();
System.out.println("Informe o nome que procura");
String alterar = ler.next();
//aqui estou vendo se o nome existe no bando de dados
rs = stm.executeQuery(" SELECT * from cadastro where cad_nome = '"+alterar+"' ");
//aqui o while vai percorrer toda a tabela e ver se existe o banco de dados
//se o nome existe entra aqui no while e faz o update
while(rs.next()){
consulta = false;
System.out.println("Informe o nome para substituir");
String nome = ler.next();
stm.executeUpdate("UPDATE cadastro set cad_nome= '"+alterar+"' where cad_nome= '"+nome+"' ");
System.out.println("Dados Alterados com Sucesso");
stm.close();
ler.close();
}
if(consulta){
System.out.println("Nome não consta no banco");
}
}catch(Exception e){
e.printStackTrace();
}
}
System.out.println("Informe o nome para substituir");
String nome = ler.next();
//e so add esse pedaço de código que para de dar errado
stm = con.createStatement();
stm.executeUpdate("UPDATE cadastro set cad_nome= '"+nome+"' where cad_nome= '"+alterar+"' ");
System.out.println("Dados Alterados com Sucesso");
stm.close();
ler.close();
}
Cara, tenta um jeito mais elegante de arrumar e não complicar sua vida, do jeito que você fez funciona, mas com o tempo o consumo de memória vai aumentar desnecessariamente, tente dessa forma:
...
try{
con = carrega.fazConexao();
stm = con.createStatement();
System.out.println("Informe o nome que procura");
String alterar = ler.next();
//aqui estou vendo se o nome existe no bando de dados
rs = stm.executeQuery(" SELECT * from cadastro where cad_nome = '"+alterar+"' ");
//aqui o while vai percorrer toda a tabela e ver se existe o banco de dados
//se o nome existe entra aqui no while e faz o update
while(rs.next()){
consulta = false;
System.out.println("Informe o nome para substituir");
String nome = ler.next();
stm.executeUpdate("UPDATE cadastro set cad_nome= '"+alterar+"' where cad_nome= '"+nome+"' ");
System.out.println("Dados Alterados com Sucesso");
// o problema pode estar aqui...
// stm.close();
// ler.close();
}
rs.close();
stm.close();
con.close();
if(consulta){
System.out.println("Nome não consta no banco");
}
}catch(Exception e){
e.printStackTrace();
}
...
Faça alguns testes pois aqui estou usando apenas a lógica, não testei seu código, mas perceba que eu só fecho o rs quanto o stm apenas depois de passar pelo while e não dentro dele.
Outra dica, como você está iniciando tudo bem, mas evite misturar query com variáveis, pesquise a respeito de PreparedStatement para fazer queries desse tipo:
PreparedStatement pstm = con.prepareStatement("UPDATE cadastro SET cad_nome = ? WHERE cad_nome = ?");
pstm.setString(1, "Nome"); // nesse caso começa por 1 e não por zero como em arrays
pstm.setString(2, "Nome");
pstm.executeUpdate();
...
Segue um tuto da própria oracle, está em inglês mas o que vale é estudar o código de início: