IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

[Oracle] Récupérer clé primaire après insertion ?


Sujet :

JDBC Java

  1. #1
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut [Oracle] Récupérer clé primaire après insertion ?
    Bonsoir,

    je tente de faire un insert sous oracle en mettant à jour la séquence via un nextval, et surtout je voudrais récupérer la valeur utilisée en sortie...

    J'ai lu que sur les prepared statement y a moyen de donner le nom d'une colonne à surveiller, et de pouvoir récupérer un resulset avec la valeur mise à jour mais cela ne semble pas fonctionner.

    Qqun sait il si cela fonctionne sous Oracle, ou si c'est seulement dédié aux SGBD ayant une clé autoincrémentale ?

    merci.

  2. #2
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Voici un exemple trouvé sur un autre topic que je modifie légèrement pour faire comprendre ce que je tente de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    public int ADDProduit(String ope, String abo, String marque, String ref, String prix,String lib) {
            try {
                String[] column ={"idProd"};
                PreparedStatement AddProd = con.prepareStatement("INSERT INTO produits (idProd,marque,reference,libelle, libAbo,libOp,prixProd) VALUES(SEQ_PROD.nextval,?,?,?,?,?,?)",column);
                AddProd.setString(1,marque);
                AddProd.setString(2,ref);
                AddProd.setString(3,lib);
                AddProd.setString(4,abo);
                AddProd.setString(5,ope);
                AddProd.setString(6,prix);
     
                AddProd.executeUpdate();
                ResultSet rs = AddProd.getGeneratedKeys();
                if (rs.next())
                    return rs.getInt(1);
                else return null;
            } catch (SQLException e) {
            }
     
        }

  3. #3
    Membre à l'essai
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 26
    Points : 15
    Points
    15
    Par défaut
    Désolée d'être insistante, mais je voudrais vraiment trouver une solution à ce pb.

    J'ai lu qq part que certains font des procédures en "ligne". Je ne trouve pas d'exemple concret donc je présume qu'ils font appel à un CallableStatement de ce style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CallableStatement statement = connection.prepareCall(sql);
    statement.registerOutParameter(1,Types.INTEGER);
    statement.setString(1,"test");
    ...
    statement.execute();
    System.out.println(statement.getInt(1));
    avec une requete SQL de ce style me concernant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE IDHIST INTEGER;
    BEGIN
                insert into TEST(test_ID, test_toto, ...) 
                values (S_TEST.nextval, ?, ...)
                returning test_ID INTO IDHIST;
    END;
    J'ai fait un test, mais pas moyen d'avoir la valeur....mon getInt(1) me renvoie toujours 0.

    Des idées ?

    Merci.

  4. #4
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    La façon de faire la plus évidente est de récupérer le nextval de ta séquance au préalable.

    Genre de faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select SEQ_PROD.nextval  from DUAL
    , de récupérer cette valeur puis d'exécuter l'ordre insert en utilisant la valeur récupérée.

    Ok, ce n'est pas forcément hyper optimisé et c'est de la triche, mais ça marche plutôt pas mal
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

Discussions similaires

  1. Oracle - séquence : récupérer l'id après insert
    Par apo.arutha dans le forum Développement de jobs
    Réponses: 14
    Dernier message: 24/02/2017, 10h10
  2. Comment récupérer l'ID après insertion ?
    Par Chabanus dans le forum Glassfish et Payara
    Réponses: 2
    Dernier message: 21/06/2010, 11h17
  3. Récupérer une clé primaire après insertion
    Par Cyrano dans le forum SQL
    Réponses: 6
    Dernier message: 16/02/2009, 15h55
  4. Réponses: 3
    Dernier message: 19/04/2007, 21h55
  5. [vb/C#] Récupérer un id apres insertion
    Par blast078 dans le forum Windows Forms
    Réponses: 11
    Dernier message: 13/04/2006, 21h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo