Como retornar todos os contatos da tabela MySQL num tela Java?

Fala, pessoal.

Tô com um projeto Agenda em Java e MySQL, na qual tenho um objeto Contatos, tendo os atributos
nome, telefone, email, endereço… etc
e a tabela no banco de dados, contendo os mesmos atributos.
Na tela agenda, eu gostaria que quando abri-la, retornar todos os registros da tabela do banco.

Como eu poderia fazer isso? Tentei fazer um ArrayList, mas não funcionou.

public ArrayList percorreSelect(Connection conexao) throws SQLException {
ArrayList lista = new ArrayList<>();
String sqlPercorre = “select id, nome, telefone, email, rua, numero, cidade, bairro, estado from contatos”;
try (PreparedStatement pst = conexao.prepareStatement(sqlPercorre);
ResultSet rs = pst.executeQuery()) {
while (rs.next()) {
lista.add(new Contatos(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5)
, rs.getString(6), rs.getString(7), rs.getString(8), rs.getString(9)));

				}
		} catch (Exception e) {}
		
	
}

===================================================
Eu tenho um método de consultar, porém, ela me retorna apenas um por um, queria que retornassem todos os registros da tabela numa tela só

Abaixo o método consultar que retorna um registro por vez.

public void consultar(Connection conexao) {
//Contatos contatos = new Contatos();
TelaAbrirAgenda telaabrir = new TelaAbrirAgenda(conexao);
String sql = “select * from contatos where nome = ?”;
try {
PreparedStatement pst = conexao.prepareStatement(sql);
pst.setString(1, txtBuscar.getText());
// a linha abaixo executa a query
ResultSet rs = pst.executeQuery();
//se existir o nome cadastrado
if (rs.next()) {
//contatos.toString();

			   System.out.println
			   		  ("Nome: " + rs.getString(2) + 
					   "\nTelefone: " + rs.getString(3) + 
					   "\nEmail: " + rs.getString(4) + 
					   "\nEndereço: " + rs.getString(5) + rs.getString(6) + rs.getString(7) + rs.getString(8)+
					   " \n-------------------------------------- ");
			   			
			  
			   //telaabrir.lblResultado.setText(rs.getString(2));
			   //telaabrir.lblResultado2.setText(rs.getString(3));
			   //telaabrir.lblResultado3.setText(rs.getString(4));
			  Neste trecho, eu seto os label com as informações que vem do banco, gostaria de saber se tem algum jeito mais efetivo de fazer isso também rs


		   } else {
			   JOptionPane.showMessageDialog(null,"Não há este contato cadastrado.");
		   }
		   
		   
	   }
	   catch (Exception e ) {
		   telaabrir.lblResultado.setText(" Deu erro!"
	   + "\n " + e);
	   }
   }

Obrigado a todos.

Trabalhando com objetos não funciona?

Tipo:

 String sql = “select * from contatos”;  //Select para retornar todos
 while (rs.next()) {
    Contato c = new Contrato();
     c.setId(rs.getInt(1));
     c.setNome(rs.getstring(2))
     //Seta aqui o restante dos atrbutos
    lista.add(c); 
 }

Daí você retorna esta lista no método e captura os get dos atributos na tela.

1 curtida

Opa! Resolveu meu problema. Desta maneira funcionou, muito obrigado, amigo!

1 curtida

Tem uma sugestão de como retornar estes dados em uma tela? sem ser no console.

Como você ta trabalhando com desktop eu nao sei bem, mas basicamente avcredito que a classe da tela vai chamar o dao e este dao vai retornar esta lista de objetos, então você teria que dar um jeito de criar uma tabela na interface e popular esta tabela com os gets dos atributos.

A estratégia é essa mesmo. Já criei uma lista retornando estes objetos e tá funcionando por System.out. Porém, preciso colocar esta tabela na interface mas nao sei como