[Resolvido] Pegar o valor do próximo ID autoincremento no MySQL, JavaFX

Estou precisando pegar o valor do próximo ID a ser inserido no BD, tenho 2 tabelas por exemplo Visitas e Sonho, onde a foreign key da tabela Sonho é o ID da tabela Visitas, esses dados são inseridos simultaneamente no sistema, então para isso tenho que pegar qual sera o valor do ID da tabela Visitas e inserir na tabela sonho, estava tentando fazer da seguinte maneira:

select auto_increment from information_schema.tables where table_name = 'tblvisitas'and table_schema = 'bdrvisitas';

mas esse código não esta retornando o próximo ID, na primeiro momento retornou, mas depois que apaguei um registro e inseri novos registros, ele passou a sempre me retornar o mesmo valor, já pesquisei várias coisas e ainda não consegui resolver, se alguém puder ajudar, agradeço desde já

1 curtida

Um select simples não resolve pra você?

SELECT COALESCE(MAX(ID), 0) + 1 AS PROXIMO_REGISTRO FROM TBLVISITAS;

1 curtida

Minha dúvida é se várias pessoas usando ao mesmo tempo, pode ocorrer de pegar o ID da tabela Visitas de forma errada? fiz o teste com o código que me passou pegou o próximo ID corretamente, mas se apago o ultimo registro, por exemplo o id 6, e execute o código ele me retorna o 6 novamente e não o 7 que seria o próximo do autoincremento.

Entendi, realmente não resolveria nesse caso!
Estranho que a consulta que você fez deveria funcionar normalmente, será que você não perdeu alguma configuração?

1 curtida

Já que o Mysql é mais limitado por nao ter sequence, pra ter total controle tente emular como explica aqui: https://stackoverflow.com/a/2292030

1 curtida

Nem sempre apagar um registro é bom, as vezes apenas esconder é melhor.
Considere criar uma coluna no banco chamada ativo por exemplo, ai caso queira “apagar” você apenas muda o ativo para false, assim mantendo o último id e o registro no banco

Eu pessoalmente não gosto de apagar, pois os registros ficam como histórico e nunca se sabe o que virá pela frente

1 curtida

Bom dia amigo.

Você pode tentar usar funções do banco de dados, acredito que disparando as instruções na sequencia pode dar certo.

INSERT INTO visita (`VISITA`) VALUES ('VISITA2');
INSERT INTO sonho (`SONHO`, `VISITA_ID`) VALUES ('SONHO1', LAST_INSERT_ID());

Mas eu aconselho a usar um banco diferente como o Derby da Apache ou o OracleXE.

1 curtida

boa tarde amigos, agradeço a todos pela ajuda, consegui utilizar o código que estava tentando antes, após dar o comando abaixo, como Jonathan_Medeiros disse, estava faltando alguma configuração e era a de privilégios, não sei se essa é a maneira mais correta, mas funcionou como eu estava esperando

GRANT ALL PRIVILEGES ON *.* TO 'user'@'endereco' IDENTIFIED BY 'nomedobanco';
1 curtida