Armazenar ultimo id de uma tabela

Pessoal, como eu faço pra armazenar o ultimo id de uma tabela em uma variavel do tipo int

Já vi que é por aqui: select max(campo_id) from tabela

mas como armazenar isso em uma variavel?

isso seria pra nao utilizar o recurso de auto incremento em um botão salvar…

olha, não entendo por que não utilizar o auto incremento. É um caso específico ou você simplismente quer controlar na mão os id´s? Normalmente isso não é uma boa ideia.

Eu vejo um porquê não usar:

Utilizamos Informix aqui na empresa, e o auto increment dele (tipo SERIAL) não entra na replicação, portanto não pode ser utilizado…

Nesse caso, sempre que alguém vai salvar um registro que necessite disto, eu travo(lock) a transação sempre que alguém vai pegar o último ID, assim, garanto que só entrem novos e não duplicados…

Por exemplo, o cara salva um registro com id=4
em seguida ele apaga…

Quando for inserir um novo registro, o id (com auto-incremento) seria 5. Pra isso quero controlar o id, para o id ser 4 novamente.
E eu não quero deixar “espaços em branco” na minha tabela…

Já consegui resolver meu problema, retornei o numero do ultimo registro e incrementei com 1.
:wink:

Cara se você saca de relacionamento entre tabelas faz assim, cria uma tabela onde você vai manter esse ultimo id, por exemplo quando você precisar saber qual o ultimo id você vai e consulta essa tabela, daí vamos dizer que você precisa adicionar um novo cliente você vai consulta nessa ultima tabela o ultimo id incremente em 1 salva na tabela e passa esse novo id para a tabela do cliente. Se não ficou muito claro é só voltar a postar aqui que estamos aqui pra isso.

Ok, entendo que você não queira ter espaços na sua tabela, mas dependendo do relacionamento entre as tabelas que você tiver, pode ficar um pouco complicado, principalmente na parte de referência entre as tabelas.

[]´s

Bom, é exatamente isso o que eu quero fazer. O problema é como armazenar o resultado da consulta SQL em uma variável int.

veja se isso ajuda:

//Criei um método para você utilizar com qualquer tabela
public int ultimoRegistro(String tabela, String coluna) {   
        String sql = "SELECT max("+coluna+") FROM " + tabela;   
        int ultimoReg = 0;
        Statement stm = null;   
        ResultSet rs = null;   
        try {   
            //conexão com a base   
            Connection conexao = Conexao.getConnection();   
            stm = (Statement) conexao.createStatement();   
            rs = stm.executeQuery(sql);   
            if(rs.next()) {   
               ultimoReg = rs.getInt(1);
            }   
            rs.close();   
            stm.close();   
            conexao.close();   
        } catch (SQLException ex) {   
            System.out.println("ERRO SQL: " + ex);   
        }   
  
        return ultimoReg ;   
  
    }  

[]´s

se vc quer um metodo simples… onde a tabela segue um padrão eh facil…
se o ID sempre começar em 1… e nenhum dos IDs estiver faltando no meio…

então vc pode simplesmente contar o numero de ocorrencias na tabela… a partir de saber quantas ocorrencias tem, vc saberá qual o ID do proximo…

eh facil de usar
http://dev.mysql.com/doc/refman/4.1/pt/counting-rows.html

MySQL> SELECT COUNT(*) FROM tabela;
- vai retornar um numero X
- esse numero vc faz X++
- e pronto, vc tem o proximo numero de ID pra ser usado na hora de inserir

SELECT MAX nao é confiavel… SELECT COUNT menos ainda…
Se 2 pessoas iniciarem uma inclusão, ambas terao o mesmo valor de MAX. 1 das inclusoes vai falhar.

Recomendo que use uma SEQUENCE ou algo do tipo.