[java+mysql] Récupérer lvaleur d'un champ auto incrément après insert

Récupérer lvaleur d'un champ auto incrément après insert [java+mysql] - Java - Programmation

Marsh Posté le 19-12-2002 à 19:19:50    

Voilsà, j'ai une colonne id par exemple qui est de type auto incrément et j'ajoute une ligne à cette table, puis je connaitre directement la valeur de l'id du champ ajouté.


---------------
Belgian connection
Reply

Marsh Posté le 19-12-2002 à 19:19:50   

Reply

Marsh Posté le 19-12-2002 à 19:20:43    

SELECT @@IDENTITY;
 
fais une recherche là dessus pour plus d'infos ;)

Reply

Marsh Posté le 19-12-2002 à 19:32:07    

Code :
  1. r=s.executeQuery("Insert into Employe (nom) Values ('test');SELECT @@IDENTITY as nummatricule" );
  2.   if(r.next())
  3.                  {
  4.                  System.out.println (r.getInt(1));
  5.                  }


 
Merci, c'est une truc du genre pcq ça marche pas trop ça :/


---------------
Belgian connection
Reply

Marsh Posté le 19-12-2002 à 20:48:24    

execute le select@@identity juste apres

Reply

Marsh Posté le 19-12-2002 à 21:05:03    

ça marche pas ... :(

Code :
  1. r=s.executeQuery("Insert into Employe (nom) Values ('test')" );
  2. r=s.executeQuery("SELECT @@IDENTITY as nummatricule" );


 
exceptionjava.sql.SQLException: Syntax error or access violation: You have an er
ror in your SQL syntax near '@IDENTITY as nummatricule' at line 1
 
ça marche avec un seul  @ mais ça renvoie 0 :/


---------------
Belgian connection
Reply

Marsh Posté le 19-12-2002 à 22:11:49    

ou a tu vu qu'il y avait un numatricule ?

Reply

Marsh Posté le 19-12-2002 à 23:01:05    

c'est le nom du champ auto incrémenté ça , sinon  

Code :
  1. r=s.executeQuery("Insert into Employe (nom) Values ('test')" );
  2. r=s.executeQuery("SELECT @@IDENTITY" );


ne va pas plus, il y a une erreur dans la requête :/


---------------
Belgian connection
Reply

Marsh Posté le 19-12-2002 à 23:13:14    

essaille avec un ";" à la fin
sinon essaille ton
SELECT @@IDENTITY as nummatricule
en mettant ' ' pour 'nummatricule'
 
OU SINON CHERCHE SUR LE NET CA SE TROUVE TRES FACILEMENT !

Reply

Marsh Posté le 20-12-2002 à 00:13:19    

:heink: j'ai comme un GROS doute qu'il y ait un truc pareil dans mysql
 
et euh avant de faire ça, essaie dejà de faire ton insert correctement, mais bon...
 
avec jdbc3, y'a une fonction pour recuperer exactement ça... et les derniers drivers jdbc de mysql l'implementent  :hello:


---------------
#19b | Mardi 18 Février 2003 - nous fêtons les Bernadette | contre le fleur icq!
Reply

Marsh Posté le 20-12-2002 à 00:26:56    

mon insert marche ;) . Enfin c'est peut être dégeux :D. Tant pis pour la valeur du champ. :(


---------------
Belgian connection
Reply

Marsh Posté le 20-12-2002 à 00:26:56   

Reply

Marsh Posté le 23-12-2002 à 11:23:41    

bon concrètement, il faut faire quoi? Ca fonctionne ce select @@IDENTITY ou pas?


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 23-12-2002 à 13:55:49    

le select @@identity fonctionne sur MySQL 3.23.xx (je m'en sers sur un projet).
 
Je sais pas comment ça va avec Java mais peux-tu essayer sans ton "as matricule" et essayer de récupérer la valeur sans cela? (et mettre un ; à la fin comme l'a dit Rob Roy, ça peut pas faire de mal ;))

Reply

Marsh Posté le 23-12-2002 à 13:57:03    

drasche a écrit :

le select @@identity fonctionne sur MySQL 3.23.xx (je m'en sers sur un projet).
 
Je sais pas comment ça va avec Java mais peux-tu essayer sans ton "as matricule" et essayer de récupérer la valeur sans cela? (et mettre un ; à la fin comme l'a dit Rob Roy, ça peut pas faire de mal ;))


 
en fait je fais mon insert et puis avec la meme connection juste après je fais
 

Citation :


select last_insert_id() as id


 
et comme je ne partage pas cette connexion je n'ai pas  besoin de locker la table
 
:hello:


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 23-12-2002 à 14:17:26    

bon ce code fonctionne très bien sur ma base MySQL sur mon laptopt. Par contre le meme code sous linux avec le meme mysql ca ne fait rien (ca n'insère meme pas en base). Je crois que j'ai raté un épisode :(


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 23-12-2002 à 14:17:50    

DarkLord a écrit :

bon ce code fonctionne très bien sur ma base MySQL sur mon laptopt. Par contre le meme code sous linux avec la meme version de mysql mais sous linux, ca ne fait rien (ca n'insère meme pas en base). Je crois que j'ai raté un épisode :(


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 23-12-2002 à 14:38:12    

synchronized {
   ajout ligne
   getLastId (==> SELECT MAX(id) FROM)
}
 
 
Connaissais pas le coup du @@IDENTITY
Ca marche vraiment alors ou pas????
 
 
 
 
 
 
 


---------------

Reply

Marsh Posté le 23-12-2002 à 15:20:52    

Dephi a écrit :

synchronized {
   ajout ligne
   getLastId (==> SELECT MAX(id) FROM)
}
 
 
Connaissais pas le coup du @@IDENTITY
Ca marche vraiment alors ou pas????
 
 
 
 
 
 
 
 


 
ouais enfin voir ma query plus haut ... Sous mysql 3.5 ca fonctionne


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 23-12-2002 à 15:29:59    

pas bête du tout le coup du synchronized ;). Enfin mon projet est rendu et ils ont rien regardé :(. Enfin, à l'avenir faute de miux, je prendrai la méthode synchronized. Sous php/mysql, il y a une fonction qui renvoie l'id du dernier truc inséré.


---------------
Belgian connection
Reply

Marsh Posté le 23-12-2002 à 15:34:46    

belgique a écrit :

pas bête du tout le coup du synchronized ;). Enfin mon projet est rendu et ils ont rien regardé :(. Enfin, à l'avenir faute de miux, je prendrai la méthode synchronized. Sous php/mysql, il y a une fonction qui renvoie l'id du dernier truc inséré.


 
si tu partages pas la connexion entre plusieurs thread c'est pas nécessaire, la fuction last_insert_id fait un lock automatiquement sur la base...


---------------
Just because you feel good does not make you right
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed