Pegar ultimo id cadastrado no banco

4 respostas
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:
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;
    }
Forma 02:
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;
    }
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!

4 Respostas

pmlm

Qual a mensagem da SQLException?

barney
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:
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;
    }
Forma 02:
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;
    }
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!
SELECT "+nomeColuna+" FROM "+nomeTabela+" ORDER BY "+nomeColuna+" DESC LIMIT 1

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

http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL

renanreismartins

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

Priuli

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.
Criado 2 de dezembro de 2010
Ultima resposta 2 de dez. de 2010
Respostas 4
Participantes 5