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 :

[Débutant] Création d'une base de données


Sujet :

Android

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Points : 70
    Points
    70
    Par défaut [Débutant] Création d'une base de données
    Bonsoir,

    J'aimerais pouvoir afficher dans le log le titre du film.
    Mais comme toujours j'ai des termes soulignés en rouge, getBaseContext(), getResources() et result.
    Si quelqu'un pourrait me donner de bons conseils comme à son habitude merci.

    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
    package data.menu;
     
    import org.xmlpull.v1.XmlPullParser;
     
    import com.example.menu.FilmAdapter;
    import com.example.menu.R;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    import android.util.Log;
    import android.widget.ListView;
     
    public class DatabaseFilm extends SQLiteOpenHelper {
     
    	 private SQLiteDatabase db;
    	 private DatabaseFilm databaseFilm;
     
     
    	 public DatabaseFilm(Context context, String name,
    			 CursorFactory factory,int version){
    		 super(context, name, factory, version);
    		 databaseFilm = new DatabaseFilm(getBaseContext(), "dbFilm.db", null, 1);
    		 db = databaseFilm.getWritableDatabase();
    		 db.setLockingEnabled(false);
    		 db.execSQL("DROP TABLE IF EXISTS tab_film");
    		 databaseFilm.onCreate(db);
    		 result = db.rawQuery("SELECT * FROM tab_film", null);
      		 int nbrCol = result.getColumnCount();
      		 Log.i("ENI", "Data = " + String.valueOf(nbrCol));
     
     
      		 try{
    			   XmlPullParser xmlPullParser=getResources().getXml(R.xml.doc);
    			while (xmlPullParser.getEventType()!=XmlPullParser.END_DOCUMENT){
    			  if (xmlPullParser.getEventType()==XmlPullParser.START_TAG) {
     
    				  if (xmlPullParser.getName() .equals("dvd")) {
     
    					ContentValues contentValues = new ContentValues();
     
     
    					  contentValues.put("cat", xmlPullParser.getAttributeValue(0));
    					  contentValues.put("titre", xmlPullParser.getAttributeValue(1));
    					  contentValues.put("real", xmlPullParser.getAttributeValue(2));
    					  contentValues.put("img", xmlPullParser.getAttributeValue(3));
    					  Log.i("ENI", "Titre = " +contentValues.getAsString("titre"));
     
    				  }
     
    			  }
    				xmlPullParser.next();
    			}
    		  } catch (Exception e){
    			  Log.i("ENI", "Erreur = " + e.getMessage());
    				e.printStackTrace();	
     
    		  } 
     
     
    	 }
     
     
    	@Override
         public void onCreate(SQLiteDatabase db) {
        	 String strReq = "CREATE TABLE tab_film (id INTEGER PRIMARY KEY AUTOINCREMENT, cat TEXT, titre TEXT, real TEXT);";
        	   db.execSQL(strReq);
     
     
         }
         @Override
         public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2){
     
         }
    }
    res/xml/doc.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <resource> <dvd cat="documentaire" titre="Home" realisateur="Yann Arthus-Bertrand" img="home"></dvd>
    	<dvd cat="documentaire" titre="Homo Sapiens" realisateur="Jacques Malaterre" img="homosapiens"></dvd>
    	<dvd cat="documentaire" titre="La guerre en face" realisateur="Patrick Barbéris" img="laguerreenface"></dvd>
        <dvd cat="documentaire" titre="Une vérité qui dérange" realisateur="Davis Guggenheim" img="uneveritequiderange"></dvd>
        <dvd cat="documentaire" titre="Amazonia" realisateur="Thierry Ragobert" img="amazonia"></dvd>
            <dvd cat="documentaire" titre="Oceans" realisateur="Bruno Coulais" img="oceans">
        </dvd>
        </resource>
    -"Mais ici on attend pas jusqu'au Dimanche ?"

  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
    En fait je pense que tu as mal saisi l'interêt de SQLiteOpenHelper.

    Celui-ci est de gérer quasi-automatiquement la création de la base ou les mises à jours en cas de nouvelle version.

    Enfin... pas vraiment celui-ci (puisque la classe est abstraite), mais une implémentation de celui-ci qui va fournir un certain nombre d'informations:

    En gros déjà, le constructeur... il y a fort à parier que celui-ci prendra en paramètre un contexte.
    Le nom du fichier et la version sont connus par l'implémentation de ton helper, donc pas besoin de les passer au constructeur de l'implémentation.
    Ensuite il faudra vraiment implémenter les deux fonctions onCreate & onUpgrade

    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
     
    class MaBaseDeDonneeHelper extends SQLiteOpenHelper
    {
          private static final String DB_NAME = "NomDuFichierDB";
          private static final int DB_VERSION = 4; // <= à incrémenter à chaque fois que le schema sera modifié
     
          public MaBaseDeDonneeHelper(Context ctxt)
          {
               super(ctxt,DB_NAME,null,DB_VERSION);
          }
     
          protected void onCreate(SQLiteDatabase db)
          {
               // ici on va créer les tables en version 4 directement... (CREATE TABLE etc...)
     
               // puis les remplir avec des données si-besoin à la création de la DB pour la première fois.
          }
     
          protected void onUpdate(SQLiteDatabase db, int oldVersion, int newVersion)
          {
               // ici on va mettre à jour la base de données elle-même. Le plus simple est de gérer version par version:
               int version = oldVersion;
               while (version < newVersion) {
                   switch (++version) {
                       case 2:
                           // on passe de la version 1 à la version 2
                           // mise à jour du schema (ALTER TABLE...)
                           // migration des données
                           break;
                       case 3:
                           // on passe de la version 2 à la version 3
                           // mise à jour du schema (ALTER TABLE...)
                           // migration des données
                           break;
                       case 4:
                           // on passe de la version 3 à la version 4
                           // mise à jour du schema (ALTER TABLE...)
                           // migration des données
                           break;
                       default:
                           break;
                  }
             }
         }
    }


    L'utilisation est simple, quand une activité va utiliser une DB, elle va faire (dans le onCreate probablement):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    monHelper = new MaBaseDeDonneeHelper(this); // <= on passe ici le contexte courant, à savoir l'activité elle-même
    Quand tu as besoin de la base de données, tu fais simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQLiteDatabase db = monHelper.getWritableDatabase();
    Cet appel se chargera de tout...
    Si la database est nécessaire tout le temps pendant l'activité, alors autant aussi récupérer directement un pointeur de DB d'entrée de jeu dans le onCreate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.db = (new MaBaseDeDonneeHelper(this)).getWritableDatabase();
    Ne pas oublier de *fermer* la database en quittant !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur du Dimanche
    Inscrit en
    Juillet 2014
    Messages
    147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur du Dimanche
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2014
    Messages : 147
    Points : 70
    Points
    70
    Par défaut
    Merci pour ces informations précieuses et détaillées.
    Je vais tester et vous tiens informé.
    Cordialement.
    -"Mais ici on attend pas jusqu'au Dimanche ?"

Discussions similaires

  1. Réponses: 5
    Dernier message: 06/12/2007, 22h16
  2. Réponses: 4
    Dernier message: 09/11/2007, 10h48
  3. [débutant] Création d'une base de données
    Par kimlee dans le forum Administration
    Réponses: 1
    Dernier message: 03/11/2006, 10h19
  4. Réponses: 4
    Dernier message: 22/09/2004, 09h17
  5. Création d'une base de données contenant des images
    Par gandalf_le_blanc dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2004, 15h29

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