Utilização do SELECT MAX() FROM para retornar o ultimo ID cadastrado no bando de dados

Estou fazendo um sistema de cadastro e quero que após o cadastro ser inserido no banco de dados ele retorne o ID do cadastro, esse é o codigo que eu estou utilizando:

            sql = "SELECT MAX(id_aluno) FROM ALUNO";
            ps = (java.sql.PreparedStatement) con.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int id = rs.getInt("id_aluno");

mas não está localizando a coluna e está exibindo o seguinte erro:

Column 'id_aluno' not found.
SQLState:S0022
VendorErrro:0

O que pode estar acontecendo e quais outras maneiras eu posso usar para retornar o id gerado pelo banco de dados?

Você tem certeza que a coluna é id_aluno mesmo? Tenta isso:

sim o nome da coluna é id_aluno mesmo

Deu uma olhada nesse link que enviei?

O erro indica que a coluna não existe na tabela indicada.

Para casos em que a tabela ainda não possua registros você pode tratar a Query utilizando um coalesce caso o retorno seja nulo.

Exemplo:

SELECT COALESCE(MAX(ID), 0) + 1 AS ID_ATUAL FROM TABELA;

Desta forma o coalesce trata qualquer retorno nulo e a soma incrementa o id, fazendo com que sempre retorne o maior id + 1.

olhei mas não entendi muito bem o seu codigo de lá

Não tem muito segredo, traduzindo para o seu código:

ps = (java.sql.PreparedStatement) con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS);
rs = ps.getGeneratedKeys();
while (rs.next()) {
   idObj = rs.getInt(1);
   JOptionPane.showMessageDialog(null, "O ID deste cadastro é: " + idObj);
}

Fala ai @vze o seu problema é que na instrução SQL a seguir voce não deu um alias para a coluna aonde aparece o MAX(id_aluno)

sql = “SELECT MAX(id_aluno) FROM ALUNO”;
ps = (java.sql.PreparedStatement) con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
int id = rs.getInt(“id_aluno”);

voce deveria usar assim:

sql = “SELECT MAX(id_aluno) AS ‘id_aluno’ FROM ALUNO”;
ps = (java.sql.PreparedStatement) con.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
int id = rs.getInt(“id_aluno”);

Abraços
Max

eu utilizei agora deu o seguinte erro

   SQLException: Before start of result set
   SQLState: S1000

@vze qual banco vc esta utilizando? Sql Server? Oracle? Mysql? Postgree?
Pode ser as plicas, bota o sql assim:

SELECT MAX(id_aluno) AS idaluno FROM ALUNO

obrigado pela ajuda, pesquisei um pouco mais e adaptando alguns códigos cheguei nesse que funcionou:

 ResultSet rs = null;
 ps = (java.sql.PreparedStatement) con.prepareStatement(sql, 
 PreparedStatement.RETURN_GENERATED_KEYS);
 rs = ps.getGeneratedKeys();
                 
         if(rs != null && rs.next()){
             
             int id = rs.getInt(1);
}

FOI O CÓDIGO QUE EU TE PASSEEEEEEEEEEEEEEEEEEEEI!!! Difícil eu pistolar, mas pelo amor hein…