Prezados, Boa tarde.
Criei em meu Banco de Dados uma tabela despesas, e o Id dessa despesa eu coloquei Auto Increment, pois bem, no meu Jframe no momento de gerar o cadastro da despesa, gostaria que aparecesse no meu Jtextfield esse código, como eu posso fazer isso, eu já realizo a consulta no meu banco de dados pelo Resultset e mostro no Jtable, porém no momento do cadastro gostaria que aparecesse esse ID.
Qual banco se dados está usando? Usa sequence se ele suportar.
Estou utilizando o Mysql
Inclusive eu coloquei para esse campo do ID seja um Inteiro(6 digitos) ZeroFill, então preciso saber como fazer com que minha jtexfield possa receber esse ID, sem mesmo ter sido criado o cadastro para essa despesa, eu vi um outro tópico parecido, mas nenhum deles tinham a solução de fato. por isso estou recorrendo a vocês.
Desculpe mas não sei para que isso seria útil. Uma possibilidade seria fazer um count no campo ID e acrescentar + 1 esse seria o próximo ID a ser criado. É uma possibilidade mas não sei se seria a melhor forma.
Seria apenas para organização mesmo.
MySQL tem essa limitação, não suporta sequence, onde teria controle da chamada. Como alternativa, tem essa gambiarra: https://stackoverflow.com/questions/26578313/how-do-i-create-a-sequence-in-mysql
Select max() + 1 “funciona”, mas terá problema com concorrência.
Se quer tal organização, defina uma outra forma de fazê-lo.
Se fosse o caso de algum tipo de documento com numeração sequencial, até vá lá. Mas, neste caso, creio que a organização pode ser constituída de outras maneiras que não dependa disso. Só lembrando que isso que você quer é parte da lógica de negócios e não tem cabimento delegar isso ao banco de dados.
Afinal, como o @javaflex disse, você terá problemas com concorrência (quando duas ou mais pessoas estão executando a mesma tarefa. Qual delas terá o ID correto, exatamente?
Certo, entendi.
Então para usuários diferentes estarem acessando a mesma aplicação isso seria um falha, então não incluirei no meu projeto, não pensei na questão de multi-usuários.
Certo. Entendi.
Então simplesmente deixo o banco gerar o Código quando fizer o INSERT da despesa no cadastro, então depois posso consultar posteriormente o código gerado com o SELECT
Sim.
Como comentei, se não existe obrigatoriedade de que você tenha uma sequência bem controlada, essa é uma boa alternativa.
Agora, se precisar, o banco não é a melhor opção, pois, você estará sujeito ao que o @javaflex frisou.
Pra fazer isso, logo após o INSERT chame: SELECT LAST_INSERT_ID();