O erro que você está enfrentando parece estar relacionado a um índice de parâmetro fora do intervalo ao executar uma consulta SQL. Isso pode ocorrer quando você está usando um PreparedStatement e tenta definir um valor para um parâmetro que não existe na consulta.
Com base na mensagem de erro fornecida, o problema parece estar ocorrendo nas seguintes classes:
ContaDAO (linha 115) ContaService (linha 97 e linha 86) BytebankApplication (linha 98 e linha 24) A fim de resolver o problema, sugiro verificar as consultas SQL nessas linhas mencionadas e garantir que o número de parâmetros esteja correto e corresponda ao número de placeholders na consulta.
Verifique também se você está definindo corretamente os valores dos parâmetros ao usar os métodos setInt() ou métodos similares.
Além disso, revise o código relacionado à criação e configuração da conexão com o banco de dados para garantir que você esteja usando a versão correta do driver JDBC e que as configurações de conexão estejam corretas.
Se você precisar de ajuda adicional, compartilhe o código relevante dessas classes para que eu possa ajudá-lo de forma mais específica.
var cliente = new Cliente(dadosDaConta.dadosCliente());
var conta = new Conta(dadosDaConta.numero(),BigDecimal.ZERO, cliente,true);
String sql = "INSERT INTO conta(numero,saldo,cliente_nome,cliente_cpf,cliente_email,esta_ativa)" +
"VALUES(?,?,?,?,?,?)";
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.setBoolean(6,true);
preparedStatement.execute();
preparedStatement.close();
conn.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public Set<Conta> lista() {
PreparedStatement ps ;
ResultSet resultSet ;
Set<Conta> contas = new HashSet<>();
String sql = "SELECT * FROM conta WHERE esta_ativa = true";
try {
ps = conn.prepareStatement(sql);
resultSet = ps.executeQuery();
while(resultSet.next()) {
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);
Boolean estaAtiva = resultSet.getBoolean(6);
DadosCadastroCliente dadosCadastroCliente =
new DadosCadastroCliente(nome,cpf,email);
Cliente cliente = new Cliente(dadosCadastroCliente);
contas.add( new Conta(numero,saldo,cliente,estaAtiva));
}
resultSet.close();
ps.close();
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return contas;
}
public Conta listarPorNumero(Integer numero){
String sql = "SELECT * FROM conta WHERE numero =" + numero + "and esta_ativa = true";
PreparedStatement ps;
ResultSet resultSet;
Conta conta = null;
try {
ps = conn.prepareStatement(sql);
ps.setInt(1,numero);
resultSet = ps.executeQuery();
while (resultSet.next()){
Integer numeroRecuperado = resultSet.getInt(1);
BigDecimal saldo = resultSet.getBigDecimal(2);
String nome = resultSet.getString(3);
String cpf = resultSet.getString(4);
String email = resultSet.getString(5);
Boolean estaAtiva = resultSet.getBoolean(6);
DadosCadastroCliente dadosCadastroCliente =
new DadosCadastroCliente(nome, cpf,email);
Cliente cliente = new Cliente(dadosCadastroCliente);
conta = new Conta(numeroRecuperado,saldo,cliente,estaAtiva);
}
resultSet.close();
ps.close();
conn.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
return conta;
**contaService.
**
public void encerrarLogico(Integer numeroDaConta){
var conta = buscarContaPorNumero(numeroDaConta);
if (conta.possuiSaldo()) {
throw new RegraDeNegocioException("Conta não pode ser encerrada pois ainda possui saldo!");
}
Connection conn = connection.recuperarConexao();
new ContaDAO(conn).alterarLogico(numeroDaConta);
}
private Conta buscarContaPorNumero(Integer numero) {
Connection conn = connection.recuperarConexao();
Conta conta = new ContaDAO(conn).listarPorNumero(numero);
if (conta != null) {
return conta;
} else {
throw new RegraDeNegocioException("Não existe conta cadastrada com esse número!");
}
} private void alterar(Conta conta, BigDecimal valor) { Connection conn = connection.recuperarConexao(); new ContaDAO(conn).alterar(conta.getNumero(), valor); }
}