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.
RaulCarlin
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…
ksmvalente
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.
P
phillip666
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.
yorgan
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
ksmvalente
Bom, é exatamente isso o que eu quero fazer. O problema é como armazenar o resultado da consulta SQL em uma variável int.
yorgan
veja se isso ajuda:
//Criei um método para você utilizar com qualquer tabelapublicintultimoRegistro(Stringtabela,Stringcoluna){Stringsql="SELECT max("+coluna+") FROM "+tabela;intultimoReg=0;Statementstm=null;ResultSetrs=null;try{//conexão com a base Connectionconexao=Conexao.getConnection();stm=(Statement)conexao.createStatement();rs=stm.executeQuery(sql);if(rs.next()){ultimoReg=rs.getInt(1);}rs.close();stm.close();conexao.close();}catch(SQLExceptionex){System.out.println("ERRO SQL: "+ex);}returnultimoReg;}
[]´s
alucardeck
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…
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.