Boa tarde amigos,
Estou tomando um erro na hora de realizar um DEPÓSITO, abaixo está o trace.
Eu achei que tivesse codificado algo errado eu baixei o código fonte disponibilizado no final do módulo e continua dando erro.
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 - Realizar transferência
8 - Sair
6
Digite o número da conta:
2233
Digite o valor do depósito:
500
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at br.com.alura.bytebank.domain.conta.ContaDAO.listarPorNumero(ContaDAO.java:106)
at br.com.alura.bytebank.domain.conta.ContaService.buscarContaPorNumero(ContaService.java:83)
at br.com.alura.bytebank.domain.conta.ContaService.realizarDeposito(ContaService.java:56)
at br.com.alura.bytebank.BytebankApplication.realizarDeposito(BytebankApplication.java:137)
at br.com.alura.bytebank.BytebankApplication.main(BytebankApplication.java:35)
Caused by: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:130)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:98)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:90)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:64)
at com.mysql.cj.jdbc.ClientPreparedStatement.checkBounds(ClientPreparedStatement.java:1345)
at com.mysql.cj.jdbc.ClientPreparedStatement.getCoreParameterIndex(ClientPreparedStatement.java:1358)
at com.mysql.cj.jdbc.ClientPreparedStatement.setInt(ClientPreparedStatement.java:1536)
at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.setInt(HikariProxyPreparedStatement.java)
at br.com.alura.bytebank.domain.conta.ContaDAO.listarPorNumero(ContaDAO.java:86)
... 4 more
Disconnected from the target VM, address: '127.0.0.1:56965', transport: 'socket'
Process finished with exit code 1
Debugando vi que esta dando erro no ps.setInt(1, numero);
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);
DadosCadastroCliente dadosCadastroCliente =
new DadosCadastroCliente(nome, cpf, email);
Cliente cliente = new Cliente(dadosCadastroCliente);
conta = new Conta(numeroRecuperado, saldo, cliente);
}
resultSet.close();
ps.close();
conn.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
return conta;
}
Ai vc fala, - "Ah! mas vc passou um int onde é um boolean..."
ai da esse erro
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 - Realizar transferência
8 - Sair
6
Digite o número da conta:
2233
Digite o valor do depósito:
500.0
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:939)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextBigDecimal(Scanner.java:2740)
at br.com.alura.bytebank.BytebankApplication.realizarDeposito(BytebankApplication.java:135)
at br.com.alura.bytebank.BytebankApplication.main(BytebankApplication.java:35)
Disconnected from the target VM, address: '127.0.0.1:57010', transport: 'socket'