Como eu posso gerar um numero sequencial depois de uma gravação no banco de dados, faco o insert em uma tabela, depois disso o sistema gera um número, como eu posso fazer isso ??
nao tenho ideia de como fazer isso, so pensei na forma de incrementar algo depois da inserção, alguem pode me ajudar ?
marsola2k, cara normalmente é bom deixar isso por conta do banco com um auto increment ou uma triger, pois deixando sua aplicação cuidar disso vc pode ter vários problemas gerando números errados principalmente se for uma aplicação com grande concorrência mas segue um código para ger id na aplicação, se for uma aplicação pequena pode usar assim sem problemas
valew Rocha, tinha visto um post seu a respeito disso, vou adaptar ao meu codigo e te falo o que aconteceu, é uma aplicacao pequena por enquanto, mas pode se tornar grande, de acordo com sua aceitação !!
para testes vai rodar apenas em uma maquina.
Rcha, eu nao tinha visto, mas uma duvida, se eu estou inserindo um valor na tabela, eu teria que adicionar esse valor e nao pesquisar, conforme esta abaixo:
Se você fizer um slect depois o insert vai ter que fazer lock na tabela, ou pdoe ter problemas de concorrência. Se você vai usar os mecanismos do SGBD para gerar chaves, use também os para recuperar as chaves
O MAX(), como o phillip disse, nao eh uma boa opcao. O correto eh usar o suporte do banco para isso. No mysql tem as keys auto_increment, em oracle, postgresql e etc tem sequences, e assim por diante.
No caso do mysql, voce pode pegar a ultima key gerada usando o suporte do JDBC para isso. Eh algo como
PreparedStatement p = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
...
p.executeUpdate();
// Pega o id
ResultSet rs = p.getGeneratedKeys();
rs.next();
int id = rs.getInt(1);
rs.close();
// ...
Em bancos que usam sequences, eh necessario fazer um SELECT a parte para consultar o ultimo valor gerado da mesma.
Outra opção,alem das que a galera ja falou, seria trabalhar com triggers caso seu banco tenha suporte!
Trigger como o proprio nome diz são gatilhos, ou seja, quando acontesse alguma ação no banco ele dispara um evento que pode ser antes ou depois de uma inserção, deleçao ou atualização.
Eu pelo menos utilizo triggers quando o banco nao tem auto incremento em chaves primarias. Na verdade, se nao me engano, esses bancos que tem auto incremento estão é utilizando de triggers so que o usuario nao ve.