2
respostas

Listar contas abertas

Professor boa tarde estou com o seguinte erro:

Exception in thread "main" java.lang.RuntimeException: java.sql.SQLException: After end of result set at br.com.alura.bytebank.domain.conta.ContaDAO.listar(ContaDAO.java:69) at br.com.alura.bytebank.domain.conta.ContaService.listarContasAbertas(ContaService.java:29) at br.com.alura.bytebank.BytebankApplication.listarContas(BytebankApplication.java:66) at br.com.alura.bytebank.BytebankApplication.main(BytebankApplication.java:21) Caused by: java.sql.SQLException: After end of result set at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89) at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63) at com.mysql.cj.jdbc.result.ResultSetImpl.checkRowPos(ResultSetImpl.java:532) at com.mysql.cj.jdbc.result.ResultSetImpl.getObject(ResultSetImpl.java:1322) at com.mysql.cj.jdbc.result.ResultSetImpl.getInt(ResultSetImpl.java:830) at br.com.alura.bytebank.domain.conta.ContaDAO.listar(ContaDAO.java:57)

2 respostas

Olá, Izaias!

Pelo que você compartilhou, o erro java.sql.SQLException: After end of result set geralmente ocorre quando você tenta acessar um elemento em um ResultSet após ter passado pelo último elemento.

Isso pode acontecer, por exemplo, se você estiver fazendo algo como:

while (resultSet.next()) {
    //algum código aqui
}
int valor = resultSet.getInt("alguma_coluna");

Neste caso, quando você tenta obter o valor da coluna "alguma_coluna", o cursor do ResultSet já passou pelo último elemento, o que causa o erro.

No seu caso, o erro parece estar ocorrendo na linha 57 do seu método listar() na classe ContaDAO. Você pode verificar se está tentando acessar algum elemento do ResultSet após ter passado pelo último elemento.

Uma solução comum para esse problema é garantir que você esteja acessando os elementos do ResultSet dentro do loop while, algo como:

while (resultSet.next()) {
    int valor = resultSet.getInt("alguma_coluna");
    //algum código aqui
}

Dessa forma, você estará acessando os elementos enquanto eles existirem no ResultSet.

Espero ter ajudado e bons estudos!

Professo obrigado!