Pegar ultimo id cadastrado no banco

Galera,

Vejam se consegue me ajudar nisso: Porque este método pegarUltimoIdCadastrado não está funcionando? Tentei de duas formas e ainda assim levanta exception.

Forma 01:

[code]public Integer pegarUltimoIdCadastrado(String nomeTabela, String nomeColuna) throws SQLException {

    ResultSet rs = executarQuery("SELECT "+nomeColuna+" FROM "+nomeTabela+" ORDER BY "+nomeColuna+" DESC LIMIT 1");
    Object result = rs.getObject(nomeColuna);

    if (result == null) {
        rs.close();
        return 1;
    }
    return (Integer) result;
}[/code]

Forma 02:

[code]public Integer pegarUltimoIdCadastrado(String nomeTabela, String nomeColunaId) throws SQLException {

    ResultSet rs = executarQuery("SELECT MAX("+nomeColunaId+") AS ULTIMO FROM "+nomeTabela);
    Object result = rs.getObject("ULTIMO");

    if (result == null) {
        rs.close();
        return 1;
    }
    return (Integer) result;
}[/code]

Exception:

Exception in thread "main" java.sql.SQLException at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4725) at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4951) at br.com.pablo.dao.GenericDAO.pegarUltimoIdCadastrado(GenericDAO.java:65) at br.com.pablo.testes.TesteCurso.main(TesteCurso.java:30) Java Result: 1
Meu banco:

CREATE TABLE `TB_CURSO` ( `ID_CURSO` int(11) NOT NULL AUTO_INCREMENT, `ID_COORDENADOR` int(11) NOT NULL, `NOME` varchar(60) NOT NULL, PRIMARY KEY (`ID_CURSO`) )

Abraços!

Qual a mensagem da SQLException?

[quote=pvrsouza]Galera,

Vejam se consegue me ajudar nisso: Porque este método pegarUltimoIdCadastrado não está funcionando? Tentei de duas formas e ainda assim levanta exception.

Forma 01:

[code]public Integer pegarUltimoIdCadastrado(String nomeTabela, String nomeColuna) throws SQLException {

    ResultSet rs = executarQuery("SELECT "+nomeColuna+" FROM "+nomeTabela+" ORDER BY "+nomeColuna+" DESC LIMIT 1");
    Object result = rs.getObject(nomeColuna);

    if (result == null) {
        rs.close();
        return 1;
    }
    return (Integer) result;
}[/code]

Forma 02:

[code]public Integer pegarUltimoIdCadastrado(String nomeTabela, String nomeColunaId) throws SQLException {

    ResultSet rs = executarQuery("SELECT MAX("+nomeColunaId+") AS ULTIMO FROM "+nomeTabela);
    Object result = rs.getObject("ULTIMO");

    if (result == null) {
        rs.close();
        return 1;
    }
    return (Integer) result;
}[/code]

Exception:

Exception in thread "main" java.sql.SQLException at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:815) at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4725) at com.mysql.jdbc.ResultSetImpl.getObject(ResultSetImpl.java:4951) at br.com.pablo.dao.GenericDAO.pegarUltimoIdCadastrado(GenericDAO.java:65) at br.com.pablo.testes.TesteCurso.main(TesteCurso.java:30) Java Result: 1
Meu banco:

CREATE TABLE `TB_CURSO` ( `ID_CURSO` int(11) NOT NULL AUTO_INCREMENT, `ID_COORDENADOR` int(11) NOT NULL, `NOME` varchar(60) NOT NULL, PRIMARY KEY (`ID_CURSO`) )

Abraços![/quote]

[code]

SELECT “+nomeColuna+” FROM “+nomeTabela+” ORDER BY “+nomeColuna+” DESC LIMIT 1[/code]

SQL Injection não faça assim a sua query

alem do problema de sql injection que o amigo acima citou

o melhor que vc pode fazer para pegar a chave primaria do ultimo registro inserido é usar o metodo getGeneratedKeys do PreparedStatement.

de uma olhadinha nisso

abrassssss

O melhor jeito de obter os ids para inserir no banco, a meu ver, é atraves de Sequence, pois não tem problema de concorrencia.

SELECT MINHASEQUENCE.NEXTVAL FROM DUAL
//Exemplo de comando sql para oracle.