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

 MySQL Discussion :

decrementation de l'id dans une BD


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut decrementation de l'id dans une BD
    Salut à tous,

    Je travaille sous vista avec eclipse BD : MySQL.

    Ma question est :
    j'ai mis la colonne des Primary key (id) AUTO_INCREMENT, et j'ai 4 autres colonnes.
    - disons que j'ai : n (rows) lignes
    - je supprime la ligne avec l'id : "n-3"... cela s'effectue sans problème.
    - mais sur le nouveau tableau j'ai cela:
    id : n-5
    id: n-4
    id: n-2 *********
    id: n-1
    id: n
    - je veux rendre le (id: n-2) en (id: n-3) et ainsi de suite ==> (id: n-1) en (id: n-2)...
    sans pour autant affecter les autres colonnes de la ligne
    - c'est-à-dire décrémenter toutes les lignes se trouvant après la ligne supprimée, comme je travaille avec java.

    j'ai essayé avec cette méthode
    -
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
        //methode delButton
       private void delButtonActionPerformed(ActionEvent evt) {
     
            int select = stockTable.getSelectedRow() + 1;
     
           String sql="";
           String sql2 = "";
     
            try{
     
                sql=" DELETE FROM tab_bas " +
                       "WHERE id = " + 'select';
                stmt.executeUpdate(sql);
     
                sql2 = "SELECT id FROM tab_bas";
                ResultSet rs = stmt.executeQuery(sql2);
     
                int cmp1 = 0;
                int cmp2 = 1;
                int selCmp1 = 0;
                int selCmp2 = 0;       	    
     
                while(rs.next())
                 {
                	selCmp1 = select2  + cmp1 ;
                	selCmp2 = select2 + cmp2;
     
     
               	 stmt.addBatch("UPDATE tab_bas SET "
               		 + "id = "+ 'selCmp1' + "WHERE id = "+'selCmp2');
     
               	 cmp1++;
               	 cmp2++;
                 }
               int[] nb = stmt.executeBatch();
               //
     
               //initComponents();
     
            }
            catch(Exception e){
                commentLabel.setText("Error occurred in inserting data");
                e.printStackTrace();
            }
     
        }
    Malheureusement, le résultat n'est toujours pas probant

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Saluton,
    Pourquoi vouloir modifier des id auto_incrémentés ?
    S'ils sont clés étrangères dans d'autres tables, en plus, c'est dangereux.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Parce que j'ai créé un JTable et qu'en supprimant la ligne sur le JTable, je veux que la ligne correspondante sur la base de données soit supprimée.

    pour choisir la ligne au niveau de JTable, j'ai:

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
     int select = stockTable.getSelectedRow() + 1;

    Ce select sera la ligne à supprimer au niveau du tableau BD

    Code java : 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     try{
     
                sql=" DELETE FROM tab_bas " +
                       "WHERE id = " + 'select'; //le select est pris depuis le jtable
                stmt.executeUpdate(sql);
     
                sql2 = "SELECT id FROM tab_bas";
                ResultSet rs = stmt.executeQuery(sql2);
     
                int cmp1 = 0;
                int cmp2 = 1;
                int selCmp1 = 0;
                int selCmp2 = 0;       	    
     
                while(rs.next())
                 {
                	selCmp1 = select2  + cmp1 ;
                	selCmp2 = select2 + cmp2;
     
     
               	 stmt.addBatch("UPDATE tab_bas SET "
               		 + "id = "+ 'selCmp1' + "WHERE id = "+'selCmp2');
     
               	 cmp1++;
               	 cmp2++;
                 }
               int[] nb = stmt.executeBatch();
               //
     
               //initComponents();
     
            }
            catch(Exception e){
                commentLabel.setText("Error occurred in inserting data");
                e.printStackTrace();
            }

    cela s'effectue ... la première fois sans problème
    mais pour une deuxième suppression, j'ai deux cas :
    1. si l'id de la ligne choisie est inférieur à l'id de la ligne déjà supprimée,
    cela ne pose pas de problème...elle sera effectivement supprimée.

    2. si l'id de la ligne choisie est supérieur à l'id de la ligne déjà supprimée,
    cela pose grand problème...une autre ligne sera supprimée

    le problème est qu'en supprimant sur le JTable, l'index se met à jour tout seul,
    mais sur la base de donnée non...


    Bon, maintenant, je travaille sur une correspondance autre que celle id/index,
    mais j'accepterai toujours des propositions ou des orientations.

    merci bien

  4. #4
    Membre Expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Par défaut
    Citation Envoyé par tifozy Voir le message
    parceque j'ai crée un JTable et qu'en supprimant la ligne sur le JTable je veut que la ligne correspandante sur la base de donnée soit supprimée.
    Que je sache, après la requête DELETE, la ligne va bien être supprimée, je ne vois pas l'intérêt de modifier les id.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    oui t'a raison !
    ce n'est qu'une fuite de ma part
    mille excuses...je vais modifier mon texte

  6. #6
    Membre averti
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Non , non c'est correct. C'est juste qu'il faut suivre ce que j'ai écrit par la suite (dans le même paragraphe).

    Cela ne s'effectue correctement qu'à la 1ere suppression, puis la ligne que je supprime au niveau du jtable n'est pas la même au niveau de la base de données.

    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Multi-selection dans une ComboBox ?
    Par Moloko dans le forum MFC
    Réponses: 5
    Dernier message: 07/07/2021, 17h26
  2. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  3. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  4. Réponses: 3
    Dernier message: 09/05/2002, 01h39
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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