2009-05-28 6 views
1

Avoir une table de liaison (ou ref) qui a une double clé primaire. Besoin de retourner la dernière clé primaire qui a été générée automatiquement à partir de la connexion en cours dans une table sélectionnée. C'est en Java. La base de données est dans MS Access si cela fait une différence. Désolé pour la description précipitée, mais notre équipe travaille à un horaire serré.Comment retourner la dernière clé primaire du dernier élément ajouté dans java?

Tous les liens ou suggestions seraient les bienvenus.

EDIT:

La base de données est rempli en utilisant SQL. Nous entrons les données pour un formulaire, mais nous ne connaissons pas le numéro généré automatiquement. Besoin de savoir ce que c'était afin qu'il puisse être entré dans la table de référence. Nous ne connaissons que la moitié de la clé composite, c'est pourquoi nous avons besoin du second.

Edit:

Re la meilleure réponse à ce jour (cant semblent commentaires). je reçois l'erreur suivante ... "Exception dans le thread "AWT-EventQueue-0" java.lang.UnsupportedOperationException"

des conseils?

+0

A propos de l'exception UnsupportedOperationException. Il se peut qu'Access ne supporte pas cette opération. Googling autour, il semble que toutes les bases de données ne supportent pas cette capacité. Nous avons dû utiliser une approche différente ici dans mon travail pour Oracle, car il n'y a pas de colonnes d'identité, par exemple. S'il n'est pas trop tard pour re-concevoir vos clés, essayez de passer aux clés UUID afin de pouvoir générer les clés en Java et les insérer dans la base de données plutôt que de les générer par la base de données. Probablement trop tard pour faire ce changement, cependant. –

+0

J'ai perdu du temps sur ce projet. Est-ce que ça compte? Si quelqu'un est intéressé par une solution de contournement, il y en a une. sauvez le reord à une loation sépérée et l'ompair au dernier réordre sauvé, n alors obtenez cette clef si c'est la même chose, puis la dernière dernière fois enregistrée, et, jusqu'à ce que vous trouviez la clef. désolé ma clé C ne fonctionne pas pour une raison quelconque, Cap seulement, wtf? lol – Relequestual

Répondre

2

Vous devez faire deux choses. D'abord, vous devrez passer un paramètre supplémentaire lors de la préparation de votre déclaration ou de l'exécution de votre déclaration. Si vous utilisez les commandes préparées, procédez comme suit:

stmt = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 

Si vous ne l'utilisez les commandes préparées, procédez comme suit lorsque vous appelez executeUpdate():

stmt.executeUpdate(sql, Statement.RETURN_GENERATED_KEYS); 

Après avoir exécuté votre déclaration , vous pouvez appeler

ResultSet rs = stmt.getGeneratedKeys() 

Cela vous donnera un jeu de résultats qui contient l'une des clés qui ont été générés.

Je n'ai pas essayé cette approche avec Access, mais cela fonctionne correctement avec les colonnes d'identité SQL Server.

+0

Je suis en train d'essayer moi-même en utilisant Java 1.7 avec Access 2010 sur ODBC, et je peux confirmer que je reçois également un java.lang.UnsupportedOperationException lors de l'appel de la fonction stmt.executeUpdate. – Bassam

0

Placez les deux valeurs de la clé composite dans un tableau d'objets avec deux éléments et renvoyez-la.

Vous pouvez également placer la nouvelle clé composite dans l'instance que vous venez d'enregistrer et la renvoyer.

2

Statement.getGeneratedKeys() devrait faire l'affaire ...

Questions connexes