Oi!
Manda aqui o código da sua classe ContaService.
package br.com.alura.bytebank.domain.conta;
import br.com.alura.bytebank.Conectionfactory;
import br.com.alura.bytebank.domain.RegraDeNegocioException;
import br.com.alura.bytebank.domain.cliente.Cliente;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashSet;
import java.util.Set;
public class ContaService {
private Conectionfactory connection;
public ContaService() {
this.connection = new Conectionfactory();
}
private Set<Conta> contas = new HashSet<>();
public Set<Conta> listarContasAbertas() {
return contas;
}
public BigDecimal consultarSaldo(Integer numeroDaConta) {
var conta = buscarContaPorNumero(numeroDaConta);
return conta.getSaldo();
}
public void abrir(DadosAberturaConta dadosDaConta) {
var cliente = new Cliente(dadosDaConta.dadosCliente());
var conta = new Conta(dadosDaConta.numero(), cliente);
if (contas.contains(conta)) {
throw new RegraDeNegocioException("Já existe outra conta aberta com o mesmo número!");
}
String sql = "INSERT INTO conta (numero, saldo, cliente nome, cliente cpf, cliente email)" +
"VALUES (? ,? ,? ,? ,?)";
Connection conn = connection.recuperarconexao();
try {
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setInt(1, conta.getNumero());
preparedStatement.setBigDecimal(2, BigDecimal.ZERO);
preparedStatement.setString(3, dadosDaConta.dadosCliente().nome());
preparedStatement.setString(4, dadosDaConta.dadosCliente().cpf());
preparedStatement.setString(5, dadosDaConta.dadosCliente().email());
preparedStatement.execute();
} catch (SQLException e) {
throw new RuntimeException();
}
}
public void realizarSaque(Integer numeroDaConta, BigDecimal valor) {
var conta = buscarContaPorNumero(numeroDaConta);
if (valor.compareTo(BigDecimal.ZERO) <= 0) {
throw new RegraDeNegocioException("Valor do saque deve ser superior a zero!");
}
if (valor.compareTo(conta.getSaldo()) > 0) {
throw new RegraDeNegocioException("Saldo insuficiente!");
}
conta.sacar(valor);
}
public void realizarDeposito(Integer numeroDaConta, BigDecimal valor) {
var conta = buscarContaPorNumero(numeroDaConta);
if (valor.compareTo(BigDecimal.ZERO) <= 0) {
throw new RegraDeNegocioException("Valor do deposito deve ser superior a zero!");
}
conta.depositar(valor);
}
public void encerrar(Integer numeroDaConta) {
var conta = buscarContaPorNumero(numeroDaConta);
if (conta.possuiSaldo()) {
throw new RegraDeNegocioException("Conta não pode ser encerrada pois ainda possui saldo!");
}
contas.remove(conta);
}
private Conta buscarContaPorNumero(Integer numero) {
return contas
.stream()
.filter(c -> c.getNumero() == numero)
.findFirst()
.orElseThrow(() -> new RegraDeNegocioException("Não existe conta cadastrada com esse número!"));
}
}
O problema está no método abrir, no seu SQL:
String sql = "INSERT INTO conta (numero, saldo, cliente nome, cliente cpf, cliente email) VALUES (? ,? ,? ,? ,?)";
Está faltando o underline nas colunas nome, cpf e email. O certo:
String sql = "INSERT INTO conta (numero, saldo, cliente_nome, cliente_cpf, cliente_email) VALUES (? ,? ,? ,? ,?)";