Boa noite leticia! Eu realmente não vi algum erro no seu codigo nem intendi muito bem o que se passa! mas sou muito iniciante no assunto também mas vou postar o meu código parecido com o seu para você dar uma comparada:
public boolean consultar(String nome, ClassClientes c) {
String sql = "select * from clientes where Upper(Nome) Like Upper('%"+ nome + "%')";
boolean achou = false;
try {
Statement stmt = (Statement) connection.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
c.setNome(rs.getString("Nome"));
c.setCidade(rs.getString("Cidade"));
c.setTelefone(rs.getString("Telefone"));
achou = true;
}
rs.close();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return achou;
}
Nesse código de cima eu passo como parâmetro um nome de consulta que está em um TextField. Passo também um objeto do tipo clientes que tem os mesmos campos do meu banco de dados(bem simples) então se achar um cliente com esse nome o método devolve o objeto preenchido e com ele dou um setText nos campos referentes.
Aí vai meu código para alterar:
public int alterar(String ConsNome, ClassClientes cliente) {
String sql = "update clientes set Nome = '" + cliente.getNome() + "', Cidade = '" + cliente.getCidade() + "', Telefone = '" + cliente.getTelefone() + "' where Nome = '" + ConsNome + "'";
int registro;
try {
Statement stmt = (Statement) connection.createStatement();
registro = stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return registro;
}
Os parâmetros desse método funciona da mesma forma que o outro. Porém ele usa um nome de consulta passado como parâmetro para usar no where que se a pessoa digitar o no textfield o nome simplificado tipo para Esdras digitar esd na hora que ele for preencher os campos eu preencho o campo de consulta com o nome real cadastrado para não ocorrer erro nesse método.
Aí vai o para Salvar:
public void salvar(ClassClientes cliente) {
String sql = "insert into clientes(Nome, Cidade, Telefone) values (?, ?, ?)";
try {
PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(sql);
stmt.setString(1, cliente.getNome());
stmt.setString(2, cliente.getCidade());
stmt.setString(3, cliente.getTelefone());
stmt.execute();
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
Esse código é bem simples usando o método citado pelo nosso amigo de dar sets nos valores em ?.
E por ultimo o de excluir:
public int excluir(String ConsNome) {
String sql = "delete from clientes where Nome = '" + ConsNome + "'";
int registro;
try {
Statement stmt = (Statement) connection.createStatement();
registro = stmt.executeUpdate(sql);
stmt.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return registro;
}
Aqui também bem simples apenas passo o nome de consulta e ele apaga todos campos referente àquele nome…
Se quiser que te passo por email os meus arquivos .class desse programa(ele é muito simples pois foi o primeira conexão com banco de dados). A uma dica! Se quiser continuar usando um tipo de ArrayList usa um HashSet que tem quase as mesmas características mas possui uma velocidade incrivelmente maior na hora de adicionar e pesquisar no set!
Você pode usa essa sintaxe(pode pesquisar os outros comandos também bem utis):
Collection<String> Set = new HashSet<String>();
Set.add("Olá"); //Aqui adiciona uma string como nos arraylists.
boolean contem = Set.contains("Olá"); //Aqui me retorna se no set possui ou não a string "Olá".
Em uma apostila de java que eu li em um exercício tinha um codigo que você deixava uma especie de cronometro(Aquele de pegar a diferença do tempo final com o inicial e dividir por 1000) e adicionar 30 000 números e depois pesquisar os mesmos usando ArrayLists e HashSets. No exemplo o arraylist deu cerca de 15 segundos(não lembro direito) mas o hashset não deu nem 1 segundo(Nem metade se eu me lembro bem). Fica a dica. Qualquer coisa manda um email no [email removido]
Obrigado! Tomara que funcione seu código.
*Editando…
Esqueci de dizer que o meus métodos de alterar e excluir devolve um número inteiro que é devolvido no comando:
e dentro do método que chama esses métodos uso algo do tipo:
if (alterar(ConsNome, cliente) != 0) {
//Código funcionou.
} else {
//Não funcionou.
}
Obrigado novamente. Espero que dessa forma funcione! Beijos.