Primentamente adicionei no menu a busca por apenas uma conta:
public static void main(String[] args) {
var opcao = exibirMenu();
while (opcao != 8) {
try {
switch (opcao) {
case 1:
listarContas();
break;
case 2:
abrirConta();
break;
case 3:
encerrarConta();
break;
case 4:
consultarSaldo();
break;
case 5:
realizarSaque();
break;
case 6:
realizarDeposito();
break;
case 7: //lista apenas uma conta
listarUmaConta();
break;
}
} catch (RegraDeNegocioException e) {
System.out.println("Erro: " +e.getMessage());
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu");
teclado.next();
}
opcao = exibirMenu();
}
System.out.println("Finalizando a aplicação.");
}
private static int exibirMenu() {
System.out.println("""
BYTEBANK - ESCOLHA UMA OPÇÃO:
1 - Listar contas abertas
2 - Abertura de conta
3 - Encerramento de conta
4 - Consultar saldo de uma conta
5 - Realizar saque em uma conta
6 - Realizar depósito em uma conta
7 - Listar uma conta
8 - Sair
""");
return teclado.nextInt();
}
Em seguinda implementei a função passando o numero da conta que desejo e chamo a classe ContaService e chamo o metodo listaUmaConta():
private static void listarUmaConta(){
System.out.println("Digite o número da conta:");
var numeroDaConta = teclado.nextInt();
//aqui chamo o service em que tem a função de listar a conta especifica
var conta = service.listarUmaConta(numeroDaConta);
System.out.printf(String.valueOf(conta));
System.out.println("Pressione qualquer tecla e de ENTER para voltar ao menu principal");
teclado.next();
}
Aqui é a implementação do metodo que chama a conexao e retorna a conta implementado o a Classe ContaDao com o metodo buscaUmaConta():
public Conta listarUmaConta(Integer numeroConta){
Connection conn = connection.recuperarConexao();
return new ContaDao(conn).buscarUmaConta(numeroConta);
}
E aqui é o ultimo trecho que faz a busca da conta e torna a conta:
public Conta buscarUmaConta(Integer numConta){
PreparedStatement ps;
ResultSet resultSet ;
Set<Conta> contas = new HashSet<>();
Conta conta = null;
// Declaração da instrução SQL para selecionar todas as contas
String sql = "SELECT * FROM conta";
try {
// Preparação da instrução SQL para execução
ps = conn.prepareStatement(sql);
// Execução da instrução SQL e obtenção do resultado
resultSet = ps.executeQuery();
// Iteração sobre os resultados do ResultSet
while (resultSet.next()) {
// Recuperação dos dados da conta a partir do ResultSet
Integer numero = resultSet.getInt(1);
BigDecimal saldo = resultSet.getBigDecimal(2);
String nome = resultSet.getString(3);
String cpf = resultSet.getString(4);
String email = resultSet.getString(5);
if (numConta == numero){
// Criação de um objeto DadosCadastroCliente a partir dos dados recuperados
DadosCadastroCliente dadosCadastroCliente = new DadosCadastroCliente(nome, cpf, email);
// Criação de um objeto Cliente a partir dos dados de cadastro do cliente
Cliente cliente = new Cliente(dadosCadastroCliente);
// variavel de conta recebe a conta encontrada
conta = new Conta(numero, cliente);
}else{
System.out.printf("Conta nao encontradas");
}
}
resultSet.close();
ps.close();
conn.close();
} catch (SQLException e) {
// Lançamento de uma exceção em caso de erro ao executar a instrução SQL
throw new RuntimeException(e);
}
return conta;
}