Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > JDBC
JDBC Forum d'entraide sur l'API JDBC (Java Database Connectivity) et l'accès aux bases de données. Avant de poster -> FAQ JDBC
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/11/2012, 16h04   #1
oneagaindoguys
Membre expérimenté
 
Homme
Ingénieur développement logiciels
Inscription : avril 2009
Messages : 519
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 519
Points : 518
Points : 518
Par défaut [PostgreSQL] Utiliser generatedKeys

Bonjour,

je suis en train de migrer ma base de données et après plusieurs recherches et essais de mon coté, je m'en remet à vous.
Comme dit dans le titre, je passe à PostgreSQL et je souhaite récupérer les clés générées sur une requêtes INSERT.

Voici le code "basique" que j'utilisais avec MySQL

Code :
1
2
3
4
5
6
7
8
9
10
String requete = "INSERT INTO GroupeTest (titre, scenario) VALUES (?, ?)";
            PreparedStatement pstmt = getConnexion().prepareStatement(requete,
                   Statement.RETURN_GENERATED_KEYS);
            pstmt.setString(1, groupeTest.getTitre());
            pstmt.setInt(2, Integer.parseInt(contenantId.substring(1)));
            pstmt.executeUpdate();
            ResultSet generatedKeys = pstmt.getGeneratedKeys();
            if (generatedKeys.first()) {
                groupeTest.setId(generatedKeys.getInt(1));
            }
Le plantage se fait au niveau du generatedKeys.first() où PostgreSQL me renvoie L'opération nécessite un scrollable ResultSet, mais ce ResultSet est FORWARD_ONLY. J'ai alors tenté de remplacé
Code :
Statement.RETURN_GENERATED_KEYS
par
Code :
ResultSet.TYPE_SCROLL_INSENSITIVE
et par
Code :
ResultSet.TYPE_SCROLL_SENSITIVE
. J'obtiens la même erreur. J'en déduis alors que le résultSet extrait du preparedStatement n'est pas Scrollable.

Comment faire ?
Peut-on configurer PostgresSQL pour rendre le comportement similaire à MySQL sachant que je parcours la ResultSet de façon séquentielle ?

Merci d'avance
oneagaindoguys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 16h11   #2
Népomucène
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 1 382
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 1 382
Points : 2 327
Points : 2 327
Code :
if (generatedKeys.first()) {
à la place de .first()
as-tu essayé .next() ?

en général, les ResultSet sont positionnés avant le 1er enregistrement lors de l'ouverture
__________________
·· −· −−· ·· ·−· ··− −− ·· −− ··− ··· −· −−− −·−· − ·
· − −·−· −−− −· ··· ··− −− ·· −− ··− ·−· ·· −−· −· ··
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2012, 16h17   #3
oneagaindoguys
Membre expérimenté
 
Homme
Ingénieur développement logiciels
Inscription : avril 2009
Messages : 519
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Sarthe (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Service public

Informations forums :
Inscription : avril 2009
Messages : 519
Points : 518
Points : 518
Citation:
Envoyé par Népomucène Voir le message
Code :
if (generatedKeys.first()) {
à la place de .first()
as-tu essayé .next() ?

en général, les ResultSet sont positionnés avant le 1er enregistrement lors de l'ouverture
En effet, je n'ai pas d'exception levée. Pour le coup, puisque comme tu le dis, les ResultSet sont positionnés avant le 1er enregistrement lors de l'ouverture, res.firs() et res.next() est censé revenir au même.
La différence est le fait que ça une ligne relative et non une absolue.
oneagaindoguys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 16h36   #4
Népomucène
Membre Expert
 
Homme
Développeur java, access, sql server
Inscription : octobre 2005
Messages : 1 382
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Développeur java, access, sql server
Secteur : Industrie

Informations forums :
Inscription : octobre 2005
Messages : 1 382
Points : 2 327
Points : 2 327
Citation:
La différence est le fait que ça une ligne relative et non une absolue.
.first() ne marche que sur des ResultSet scrollables
par exemple si le pointeur est sur le 5ème enregistrement et que tu as besoin de revenir sur le 1er
__________________
·· −· −−· ·· ·−· ··− −− ·· −− ··− ··· −· −−− −·−· − ·
· − −·−· −−− −· ··· ··− −− ·· −− ··− ·−· ·· −−· −· ··
D'abord qu'il marche. Ensuite qu'il soit rapide. Enfin qu'il soit agréable à utiliser.
First, make it work. Then, make it fast. Finally, make it user-friendly.
Erst, mach', dass es funktioniert. Dann, mach', dass es schnell geht, Zum Schluss mach' es benutzerfreundlich.
Népomucène est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h05.


 
 
 
 
Partenaires

Hébergement Web