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

Android Discussion :

Android SQLite problèmes update Id (autoincrement)


Sujet :

Android

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Android SQLite problèmes update Id (autoincrement)
    Bonjour à tous,

    On a fait une base de données dont la structure est la suivante
    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
     
    public class MaBaseSQLite extends SQLiteOpenHelper {
     
     private static final String TABLE_OPERATEURS = "table_operateurs";
     private static final String COL_ID = "ID";
     private static final String COL_CODOP = "Codop";
     private static final String COL_NOMOP = "Nomop";
     
     private static final String CREATE_BDD = "CREATE TABLE " 
     + TABLE_OPERATEURS + " ("
     + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
     + COL_CODOP + " TEXT NOT NULL, "
     + COL_NOMOP + " TEXT NOT NULL);";
     
     public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
      super(context, name, factory, version);
     }
    on a inséré 4 enregistrements avec succès, mais lors de la suppression par exemple du 2éme enregistrement les Id du 3éme et du 4éme restent 3 et 4.
    Or nous voulons que le 3éme Id devient 2 et le 4éme devient 3 (décrémentation par 1 des ID supérieur à celui supprimé).

    on a besoin d'un update approprié qui résout ce problème.

    Qui aurait une solution s'il vous plait?

    Merci d'avance

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Haaa ben non, c'est comme ça qu'une base de données marche....
    Pourquoi vouloir que l'identifiant soit modifié ?

    Je pense qu'il y a plus un problème d'utilisation de la base de données que données elles même ... Peut-on avoir plus d'information sur le sujet ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 591
    Points : 18 495
    Points
    18 495
    Par défaut
    Ouais il y a vraiment aucun intérêt à ce que les id se suivent.

    Mais si tu veux à chaque suppression, tu fais des update sur toutes tes entrées.
    Tu fais un ORDER BY ID.

    Et tu fais une boucle sur toutes les lignes.
    Comme ça tu remettras toi même 1, 2, 3, 4, etc...
    Keith Flint 1969 - 2019

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Haaa ben non, c'est comme ça qu'une base de données marche....
    Pourquoi vouloir que l'identifiant soit modifié ?

    Je pense qu'il y a plus un problème d'utilisation de la base de données que données elles même ... Peut-on avoir plus d'information sur le sujet ?
    Salut,
    bon dans l'activité on crée des boutton radio par une boucle POUR dont les i sont synchronisés avec les ID de la table et le text est celle du nomop!!
    donc si je supprime on aura un décalage ce que résulte dans l'affichage un boutton vide et n'affiche pas le derniér bouton.

    Citation Envoyé par thierrybenji Voir le message
    Ouais il y a vraiment aucun intérêt à ce que les id se suivent.

    Mais si tu veux à chaque suppression, tu fais des update sur toutes tes entrées.
    Tu fais un ORDER BY ID.

    Et tu fais une boucle sur toutes les lignes.
    Comme ça tu remettras toi même 1, 2, 3, 4, etc...
    oui c ça ce qu'on veux faire mais on n'a pas pu ni ecrire la requette update ni l'appelé puisque on est debutant en android!!! voici le code de notre activité
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    package bdradio.com;
     
     
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.LinearLayout;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TabHost;
    import android.widget.TabHost.TabSpec;
    import android.widget.Toast;
    public class BDRADIOActivity extends Activity {
       private TabHost monTabHost;
       int i;
       @Override
       public void onCreate(Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);      
          // Base de donne
             //Création d'une instance de ma classe BD_Operateur
             final OperateurBDD bd_operateur = new OperateurBDD(this);  
     
            //Création d'un operateur       
             final Button save_button = (Button) findViewById(R.id.vis1);
       save_button.setOnClickListener(new OnClickListener() 
       {
        public void onClick(View v) 
        {    
         EditText contentET = (EditText) findViewById(R.id.editText1);
         String nom = contentET.getText().toString();
         EditText fileET = (EditText) findViewById(R.id.editText2);
         String cod = fileET.getText().toString();    
         Operateur table_operateurs = new Operateur(cod,nom);  
          //On ouvre la base de données pour écrire dedans
         bd_operateur.open();
               //On insère l'operateur que l'on vient de créer
         bd_operateur.insertOperateur(table_operateurs);
          //Pour vérifir que l'on a bien créé notre operateur dans la BDD
               //on extrait l'operateur de la BDD grâce au titre du operateur que l'on a créé précédemment
               Operateur operateurFromBdd = bd_operateur.getOperateurWithNomop(table_operateurs.getNomop());
               //Si un operateur est retourné (donc si l'operateur à bien été ajouté à la BDD)
               if(operateurFromBdd != null)
               {           
     
                //On affiche les infos de l'operateur dans un Toast
                Toast.makeText(BDRADIOActivity.this, operateurFromBdd.toString(), Toast.LENGTH_LONG).show();
               }
               bd_operateur.close();
               }
        }
       );
       //Base de donnée
     
             Log.i("","onCreate");
     
             LinearLayout ll3 = (LinearLayout)findViewById(R.id.linearLayout3); // Btn
             RadioGroup Rg = (RadioGroup)findViewById(R.id.radioGroup1); // Radio Group
             monTabHost =(TabHost) findViewById(R.id.TabHost01);
             monTabHost.setup();
             TabSpec spec = monTabHost.newTabSpec("onglet_1");
             spec.setIndicator("Scan");
             spec.setContent(R.id.Onglet1);
             monTabHost.addTab(spec);         
             monTabHost.addTab(monTabHost.newTabSpec("onglet_2").setIndicator("Parametre").setContent(R.id.Onglet2));
     
             final OperateurBDD bd_operateur2 = new OperateurBDD(this);  
             bd_operateur2.open();
     
             int lenght=bd_operateur2.countrecords()+1;
             final RadioButton[] rb = new RadioButton[lenght];
             final Button[] b = new Button[lenght];
     
             for(i=1;i<lenght;i++){
          String text ;    
             text = bd_operateur2.getnomopWithId(i);
              rb[i]  = new RadioButton(this);
                 rb[i].setText(text);
                 rb[i].setId(i);
                 Rg.addView(rb[i]);
                 int x ;
                 x = 100 + i;
                 b[i] =new Button(this);
                 b[i].setText("Supprimer");
                 b[i].setId(100+i);
     
                 ll3.addView(b[i]);
                 final OperateurBDD bd_operateur3 = new OperateurBDD(this);  
              bd_operateur3.open();
                 final Button save_button1 = (Button) findViewById(x);
                 save_button1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {              
            String nomOp;
             int vIdBtn ;
             int vIdRadBtn;
     
            if(v == save_button1){
           vIdBtn = save_button1.getId();
          vIdRadBtn = vIdBtn - 100; 
         nomOp = (String) rb[vIdRadBtn].getText();
          bd_operateur3.removeOperateurWithId(vIdRadBtn);
       //            Toast saved_message=Toast.makeText(BDRADIOActivity.this,nomOp,1);
        //                saved_message.show();
                   }
          bd_operateur3.close();
         }
        }
     
     
          );
     
        }
             bd_operateur2.close();
     
             }
         }
    et merci..

  5. #5
    Membre extrêmement actif
    Avatar de Ryu2000
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2008
    Messages
    9 591
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2008
    Messages : 9 591
    Points : 18 495
    Points
    18 495
    Par défaut
    Puisque vous avez une Base de Données, vous n'avez qu'a créer des Cursor et vous aurez accès aux ID.

    Les id sont dans la base il faut juste aller les lires.

    Par contre c'est une super mauvaise idée de vouloir forcer les id comme vous :-s
    Keith Flint 1969 - 2019

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Je ne sais pas comment SQLite gère ça en interne, mais si c'est comme d'autre, vous aurez (exemple) 5 boutons avec des ID allant de 1 à 5.
    Vous supprimez le bouton numéro 2, vous avez vos ID 1, 3, 4 et 5.
    Vous changez ensuite en 1 à 4 (pour aller avec votre modèle).

    Je me demande bien, si vous rajoutez un bouton, il y a des chances que la séquence initiale continue, et que le prochain bouton soit inséré à l'ID, et non à la 5, comme vous le désiriez (sauf si vous le forcer ... mais où est l'intérêt de l'auto-incrémentation dans ce cas ?).

    Je rejoins les autres : c'est une très mauvaise idée de faire ça.
    Rajoutez plutôt un champ en plus dans votre table indiquant la position, et itérez la-dessus, ou affichez tout les boutons indépendamment de leurs ID.


    Mais pourquoi, concrètement, avez-vous besoin des ID ?
    Un simple Cursor avec les boutons qui vont bien ne suffit pas ?
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Hizin Voir le message
    Je ne sais pas comment SQLite gère ça en interne, mais si c'est comme d'autre, vous aurez (exemple) 5 boutons avec des ID allant de 1 à 5.
    Vous supprimez le bouton numéro 2, vous avez vos ID 1, 3, 4 et 5.
    Vous changez ensuite en 1 à 4 (pour aller avec votre modèle).

    Je me demande bien, si vous rajoutez un bouton, il y a des chances que la séquence initiale continue, et que le prochain bouton soit inséré à l'ID, et non à la 5, comme vous le désiriez (sauf si vous le forcer ... mais où est l'intérêt de l'auto-incrémentation dans ce cas ?).

    Je rejoins les autres : c'est une très mauvaise idée de faire ça.
    Rajoutez plutôt un champ en plus dans votre table indiquant la position, et itérez la-dessus, ou affichez tout les boutons indépendamment de leurs ID.

    Mais pourquoi, concrètement, avez-vous besoin des ID ?
    Un simple Cursor avec les boutons qui vont bien ne suffit pas ?
    Bon je répond a tes questions pour la 1er
    enfaite sa marche pas comme tu dit (je suis ton exemple) si en supprime le 2 le Reste des id reste le même
    2eme
    En effet en a pas ponce a ça bon pour l'auto-incrémentation en l’utilise puisque ont veux pas que l'utilisateur l'ajoute lui même
    3eme
    ta solution pare logique me nous comme tu sait ont est des débutent et en a pas des grande connaissance dans le java XD sa serai sympa si tu nous donne un exemple pour travaille avec analogie
    enf 4eme
    si tu regarde bien
    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
    47
     
     int lenght=bd_operateur2.countrecords()+1;
             final RadioButton[] rb = new RadioButton[lenght];
             final Button[] b = new Button[lenght];
     
             for(i=1;i<lenght;i++){
          String text ;    
             text = bd_operateur2.getnomopWithId(i);
              rb[i]  = new RadioButton(this);
                 rb[i].setText(text);
                 rb[i].setId(i);
                 Rg.addView(rb[i]);
                 int x ;
                 x = 100 + i;
                 b[i] =new Button(this);
                 b[i].setText("Supprimer");
                 b[i].setId(100+i);
     
                 ll3.addView(b[i]);
                 final OperateurBDD bd_operateur3 = new OperateurBDD(this);  
              bd_operateur3.open();
                 final Button save_button1 = (Button) findViewById(x);
                 save_button1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {              
            String nomOp;
             int vIdBtn ;
             int vIdRadBtn;
     
            if(v == save_button1){
           vIdBtn = save_button1.getId();
          vIdRadBtn = vIdBtn - 100; 
         nomOp = (String) rb[vIdRadBtn].getText();
          bd_operateur3.removeOperateurWithId(vIdRadBtn);
       //            Toast saved_message=Toast.makeText(BDRADIOActivity.this,nomOp,1);
        //                saved_message.show();
                   }
          bd_operateur3.close();
         }
        }
     
     
          );
     
        }
             bd_operateur2.close();
     
             }
    en utilise bien le curseur pour la création des boutons me le text du Radio boutons(nom) il dépend de l id avec qui la boucle et synchronise (avec les id des bouton crée dynamiquement ) donc sa donne a peut prêt sa
    rb[].setText( getnomopWithId where Id = Idbotton )
    IdRbotton = 1 ===> id=1 getnomopWithId 1
    IdRbotton = 2 ===> id=2 getnomopWithId 2
    IdRbotton = 3 ===> id=3 getnomopWithId 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
             for(i=1;i<lenght;i++){
          String text ;    
             text = bd_operateur2.getnomopWithId(i);
              rb[i]  = new RadioButton(this);
                 rb[i].setText(text);
                 rb[i].setId(i);
                 Rg.addView(rb[i]);
    la même opération s'effectue avec les bottons supprime crée aussi dynamiquement pour la suppression de l'opérateur
    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
        int x ;
                 x = 100 + i;
                 b[i] =new Button(this);
                 b[i].setText("Supprimer");
                 b[i].setId(100+i);
     
                 ll3.addView(b[i]);
                 final OperateurBDD bd_operateur3 = new OperateurBDD(this);  
              bd_operateur3.open();
                 final Button save_button1 = (Button) findViewById(x);
                 save_button1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {              
            String nomOp;
             int vIdBtn ;
             int vIdRadBtn;
     
            if(v == save_button1){
           vIdBtn = save_button1.getId();
          vIdRadBtn = vIdBtn - 100; 
         nomOp = (String) rb[vIdRadBtn].getText();
          bd_operateur3.removeOperateurWithId(vIdRadBtn);
       //            Toast saved_message=Toast.makeText(BDRADIOActivity.this,nomOp,1);
        //                saved_message.show();
                   }
          bd_operateur3.close();
         }
    en a besoin aussi de L'id puisque en l utilise dans pas mal de requête tel que
    removeOperateurWithId
    getnomopWithId

    j’espère que cette fois ce bien explique notre problème

    donc voila en sait pas quoi faire ont est vraiment bloque
    PS:désole pour les faute orthographe

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    voila le code de getnomopWithId est ce que en peux extraire le nomop 1 par 1 sans avoirs recoure a l ID

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	 public String getnomopWithId(int i){
     
    		  Cursor c = bdd.query(TABLE_OPERATEURS, null, COL_ID + " = " +i, null, null, null, null);
    		  if (c.moveToFirst()){
    		   String name;
    		   int nameColumn = c.getColumnIndex(COL_NOMOP);
     
    		   do{
    		    name = c.getString(nameColumn);
    		    return name;
    		   }while(c.moveToNext());
    		  }
    		  return null;
    		 }

  9. #9
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Non mais, il y a deux choses à découpler....

    L'index des RadioButton dans l'interface, et l'index des rows dans la table...

    1. Il n'y a absolument AUCUNE raison valable de vouloir modifier les ID.... La réponse la plus évidente est que l'ID est en général utilisé pour référencer la row (on est dans une base de donnée relationelles, donc d'autres rows dans d'autres tables peuvent pointer sur cet ID). En plus, comme déjà exposé, l'auto-increment est completement inutie.

    2. Au lieu de vouloir faire correspondre l'index d'un radio-button dans l'interface à l'ID d'une row dans une table, il faut plutôt assigner cet ID au radio-button... Ensuite rien de plus simple que de le récupérer...
    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
     
    // note: add an "order by ID" clause to be sure objects will be returned in the right order....
    Cursor c = bdd.query(TABLE_OPERATEURS, null, null, null, null, null, null);
    int nameColumn = c.getColumnIndex(COL_NOMOP);
    int idColumn = c.getColumnIndex(COL_ID);
    if (c.moveToFirst()) {
        do {
            int id = c.getInt(idColumn);
            String name = c.getString(idColumn);
            RadioButton rb = new RadioButton();
            rb.setTag(0,new Integer(id));
            rb.setText(name);
            rb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                     int idSelected = ((Integer)v.getTag(0)).intValue();
                }
            }
            my_view.add(rb);
        } while (c.moveToNext());
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  10. #10
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Non mais, il y a deux choses à découpler....

    L'index des RadioButton dans l'interface, et l'index des rows dans la table...

    1. Il n'y a absolument AUCUNE raison valable de vouloir modifier les ID.... La réponse la plus évidente est que l'ID est en général utilisé pour référencer la row (on est dans une base de donnée relationelles, donc d'autres rows dans d'autres tables peuvent pointer sur cet ID). En plus, comme déjà exposé, l'auto-increment est completement inutie.
    2. Au lieu de vouloir faire correspondre l'index d'un radio-button dans l'interface à l'ID d'une row dans une table, il faut plutôt assigner cet ID au radio-button... Ensuite rien de plus simple que de le récupérer...
    Enfaite notre BDD e compose de 3 class
    MaBaseSQLite
    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
    package bdradio.com;
     
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class MaBaseSQLite extends SQLiteOpenHelper {
     
    	private static final String TABLE_OPERATEURS = "table_operateurs";
    	private static final String COL_ID = "ID";
    	private static final String COL_CODOP = "Codop";
    	private static final String COL_NOMOP = "Nomop";
     
    	private static final String CREATE_BDD = "CREATE TABLE " 
    	+ TABLE_OPERATEURS + " ("
    	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
    	+ COL_CODOP + " TEXT NOT NULL, "
    	+ COL_NOMOP + " TEXT NOT NULL);";
     
    	public MaBaseSQLite(Context context, String name, CursorFactory factory, int version) {
    		super(context, name, factory, version);
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		//on crée la table à partir de la requête écrite dans la variable CREATE_BDD
    		db.execSQL(CREATE_BDD);
    	}
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		//On peut faire ce qu'on veut ici moi j'ai décidé de supprimer la table et de la recréer
    		//comme ça lorsque je change la version les id repartent de 0
    		db.execSQL("DROP TABLE " + TABLE_OPERATEURS + ";");
    		onCreate(db);
    	}
     
    }
    Operateur
    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
    package bdradio.com;
     
    public class Operateur {
     
    	private int id;
    	private String codop;
    	private String nomop;
     
    	public Operateur(){}
     
    	public Operateur(String codop, String nomop){
    		this.codop = codop;
    		this.nomop = nomop;
    	}
     
    	public int getId() {
    		return id;
    	}
     
    	public void setId(int id) {
    		this.id = id;
    	}
     
    	public String getCodop() {
    		return codop;
    	}
     
    	public void setCodop(String codop) {
    		this.codop = codop;
    	}
     
    	public String getNomop() {
    		return nomop;
    	}
     
    	public void setNomop(String nomop) {
    		this.nomop = nomop;
    	}
     
    	public String toString(){
    		return "ID : "+id+"\nCodop : "+codop+"\nNomop : "+nomop;
    	}
    }
    OperateurBDD
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    package bdradio.com;
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
    public class OperateurBDD {
     
    	 private static final int VERSION_BDD = 1;
    	 private static final String NOM_BDD = "Operateur.db";
    	 private static final String TABLE_OPERATEURS = "table_operateurs";
    	 private static final String COL_ID = "ID";
    	 private static final int NUM_COL_ID = 0;
    	 private static final String COL_CODOP = "Codop";
    	 private static final int NUM_COL_CODOP = 1;
    	 private static final String COL_NOMOP = "Nomop";
    	 private static final int NUM_COL_NOMOP= 2;
     
    	 private SQLiteDatabase bdd;
    	 private MaBaseSQLite maBaseSQLite;
     
    	 public OperateurBDD(Context context){
    	  maBaseSQLite = new MaBaseSQLite(context, NOM_BDD, null, VERSION_BDD);
    	 }
     
    	 public void open(){
    	  bdd = maBaseSQLite.getWritableDatabase();
    	 }
     
    	 public void close(){
    	  bdd.close();
    	 }
     
    	 public SQLiteDatabase getBDD(){
    	  return bdd;
    	 } 
    	 public long insertOperateur(Operateur table_operateurs){
    	  ContentValues values = new ContentValues();
     
    	  values.put(COL_CODOP, table_operateurs.getCodop());
    	  values.put(COL_NOMOP, table_operateurs.getNomop());
     
    	  return bdd.insert(TABLE_OPERATEURS, null, values);
    	 }
     
    	 public int updateIdOperateur(int id, Operateur table_operateurs){
     
    	  ContentValues values = new ContentValues();
    	  values.put(COL_ID, table_operateurs.getId());
     
    	  return bdd.update(TABLE_OPERATEURS, values, COL_ID + " > " + id , null);
    	 }
     
    	 public int removeOperateurWithId(int id){
     
    	  return bdd.delete(TABLE_OPERATEURS, COL_ID + " = " +id, null);
     
    	 }
     
    	 public Operateur getOperateurWithNomop(String nomop){
    contenu dans la BDD (ici on sélectionne le livre grâce à son titre)
    	  Cursor c = bdd.query(TABLE_OPERATEURS, new String[] {COL_ID, COL_CODOP, COL_NOMOP}, COL_NOMOP + " LIKE \"" + nomop +"\"", null, null, null, null);
    	  return cursorToOperateur(c);
    	 }
     
     
    	 private Operateur cursorToOperateur(Cursor c){
     
    	  if (c.getCount() == 0)
    	   return null;
     
     
    	  c.moveToFirst();
     
    	  Operateur table_operateurs = new Operateur();
     
    	  table_operateurs.setId(c.getInt(NUM_COL_ID));
    	  table_operateurs.setCodop(c.getString(NUM_COL_CODOP));
    	  table_operateurs.setNomop(c.getString(NUM_COL_NOMOP));
    	  c.close();
     
     
    	  return table_operateurs;
    	 }
     
    	 public int countrecords (){
    	  Cursor c = bdd.query(TABLE_OPERATEURS, null, null, null, null, null, null);
    	  return c.getCount();
    	 }
    	 public String getnomopWithId(int i){
    		  (ici on sélectionne le livre grâce à son titre)
    		  Cursor c = bdd.query(TABLE_OPERATEURS, null, COL_ID + " = " +i, null, null, null, null);
    		  if (c.moveToFirst()){
    		   String name;
    		   int nameColumn = c.getColumnIndex(COL_NOMOP);
     
    		   do{
    		    name = c.getString(nameColumn);
    		    return name;
    		   }while(c.moveToNext());
    		  }
    		  return null;
    		 }
     
    	}
    Donc l exemple que tu viens de nous donne en peux pas l applique vu que la création des radio bottons est dans l Activité de l’application

  11. #11
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Rien n’empêche de bouger le code !

    Rajouter une fonction dans OperateurBDD, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
       public List<Operateur> listOperateurs()
       {
             ArrayList<Operateur> ret = new ArrayList<Operateur>();
             Cursor c = 
             if (c.moveToFirst()) {
                do {
                   ret.add(cursorToOperateur(c));
                } while (c.moveToNext())
             }
             return ret;
        }
    Et dans le onCreate (à noter qu'il est recommandé de *ne pas* faire des appels BDD dans le main-thread de l'UI):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
         for (Operateur op : bdd.listOperateurs()) {
              Button db = new Button();
              db.setTag(0,op);
              db.setOnClickListener(new View.OnClickListener() {
                  public void onClick(View v) {
                     Operateur op = (Operateur) v.getTag(0);
                     ... ce qu on veut avec op.getId() , op.getName() ....
                  }  
              });
              layout.add(b);
         }
    Si j'ai bien compris MaBaseSQLite est le gestionnaire de base... il devrait aussi fournir l'ouverture de connections....

    Operateur est le "POJO" représentant l'entrée en base de données...

    OperateurBDD est ce qu'on appele un "DAO" (Data Access Object) [et au passage, devrait s'appeler OperateurDAO, mais je pinaille].
    Traditionnellement, les DAOs offrent les fonctions CRUD (Create/Read/Update/Delete) de base:
    * Operateur get(int id)
    * List<Operateur> getAll();
    * void delete(Operateur op)
    * void insert(Operateur op)
    * void update(Operateur op)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  12. #12
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Rien n’empêche de bouger le code !

    Si j'ai bien compris MaBaseSQLite est le gestionnaire de base... il devrait aussi fournir l'ouverture de connections....
    Operateur est le "POJO" représentant l'entrée en base de données...
    OperateurBDD est ce qu'on appele un "DAO" (Data Access Object) [et au passage, devrait s'appeler OperateurDAO, mais je pinaille].
    Traditionnellement, les DAOs offrent les fonctions CRUD (Create/Read/Update/Delete) de base:
    * Operateur get(int id)
    * List<Operateur> getAll();
    * void delete(Operateur op)
    * void insert(Operateur op)
    * void update(Operateur op)
    Merci beaucoup voila ont a résolu le problème grâce a toi
    PS: ont a supprime l'ID
    voila le COD pour les programmeur débutent qui en le même problème que moi
    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
    47
    48
     int lenght=bd_operateur2.countrecords()+1;
             final RadioButton[] rb = new RadioButton[lenght];
             final Button[] b = new Button[lenght];   
              Cursor c = bd_operateur2.getnomop();
     
              if ( c.moveToFirst()){
               do{                   
              Log.i(getLocalClassName(), "my erreur1 : ");      
              String text =c.getString(c.getColumnIndex("Nomop"));       
              Log.i(getLocalClassName(), "my erreur2 : ");          
              i =i+1; 
              rb[i]  = new RadioButton(this);
                 rb[i].setText(text);
                 rb[i].setId(i);           
                 Rg.addView(rb[i]);    
                 int x ;
                 x = 100 + i;
                 b[i] =new Button(this);
                 b[i].setText("Supprimer");
                 b[i].setId(100+i);
                 ll3.addView(b[i]);
                 final OperateurBDD bd_operateur3 = new OperateurBDD(this);  
                 bd_operateur3.open();
                 final Button save_button1 = (Button) findViewById(x);
                 save_button1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
          String nomOp;
             int vIdBtn ;
             int vIdRadBtn;
             if(v == save_button1){
           vIdBtn = save_button1.getId();
         vIdRadBtn = vIdBtn - 100; 
     
           nomOp = (String) rb[vIdRadBtn].getText();
           bd_operateur3.removeOperateurWithNomop(nomOp);
           //     Toast saved_message=Toast.makeText(BDRADIOActivity.this,nomOp,1);
          //         saved_message.show();
     //              bd_operateur2.removeOperateurWithNomop(vIdRadBtn);   
     
                   }
             bd_operateur3.close();
         }
        }
          );
              }while (c.moveToNext());
               // passer a l'enregistrement suivant
              }
                 c.close();
    Bon reste un petit souci ont veux que l'ajout et la suppression des bottons se fait en temps réel parce que la ont est oblige âpre ajoute ou supprime (un opérateur)de redémarre l’application pour voire les modification effectue
    comment en fait ??

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

Discussions similaires

  1. CRUD Android SDK / SQLite / Java : update()
    Par en_dehors dans le forum Android
    Réponses: 9
    Dernier message: 10/11/2014, 17h21
  2. Android SQLITE fonction update
    Par Benmaster1 dans le forum Android
    Réponses: 3
    Dernier message: 15/04/2014, 19h05
  3. debutant/sqlite et update problème de syntaxe
    Par Mic92 dans le forum Général Python
    Réponses: 3
    Dernier message: 05/08/2010, 19h13
  4. [Update]Problème update Eclipse
    Par tomate dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/04/2005, 11h14
  5. Problème UPDATE
    Par Eltaz dans le forum Langage SQL
    Réponses: 7
    Dernier message: 06/07/2004, 11h37

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