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 :

Stockage données SQLite


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut Stockage données SQLite
    Bonjour ,

    je cherche à stocker des données dans une base SQLite , n'ayant jamais fait cette pratique , je me tourne vers vous pour vous demandez des conseils.

    dans mon activité principale j'ai mit :

    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
    		@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);		
    		setContentView(R.layout.activity_exercice);
     
    		// gestion base de donnee
    		//Création d'une instance de ma classe JeuBdd
            JeuBdd exerciceBdd = new JeuBdd(this);
     
            //Création d'un exercice
            ExerciceActivity exercice = new ExerciceActivity(id, nom_exercice);
     
            //On ouvre la base de données pour écrire dedans
            exerciceBdd.open();
            //On insère le exercice que l'on vient de créer
            exerciceBdd.insertExercice(exercice);
     
            //Pour vérifier que l'on a bien créé notre exercice dans la BDD
            //on extrait l exercice de de la BDD grâce a l ID de l exercice que l'on a créé précédemment
            ExerciceActivity exerciceFromBdd = exerciceBdd.getExerciceWithId(exercice.getId());
            //Si un livre est retourné (donc si le livre à bien été ajouté à la BDD)
            if(exerciceFromBdd != null){
            	//On affiche les infos du livre dans un Toast
            	Toast.makeText(this, exerciceFromBdd.toString(), Toast.LENGTH_LONG).show();
            	//On modifie le ID de l'exercice
            	exerciceFromBdd.setId(0);
            	//Puis on met à jour la BDD
                exerciceBdd.updateLivre(exerciceFromBdd.getId(), exerciceFromBdd);
            }
     
            //On extrait l exercice de la BDD grâce au ID
            //S'il existe un exercice possédant cet ID dans la BDD
            if(exerciceFromBdd != null){
    	        //On affiche les nouvelle info de exercice pour vérifié que l exercice a bien été mis à jour
    	        Toast.makeText(this, exerciceFromBdd.toString(), Toast.LENGTH_LONG).show();
    	        //on supprime l exercice de la BDD grâce à son ID
    	    	exerciceBdd.removeExerciceWithID(exerciceFromBdd.getId());
            }
     
            //On essait d'extraire de nouveau l exercice de la BDD toujours grâce à son ID
            exerciceFromBdd = exerciceBdd.getExerciceWithId(exerciceFromBdd.getId());
            //Si aucun livre n'est retourné
            if(exerciceFromBdd == null){
            	//On affiche un message indiquant que l exercice n'existe pas dans la BDD
            	Toast.makeText(this, "Cette exercice n'existe pas dans la BDD", Toast.LENGTH_LONG).show();
            }
            //Si l exercice existe (mais normalement il ne devrait pas)
            else{
            	//on affiche un message indiquant que l exercice existe dans la BDD
            	Toast.makeText(this, "Cet exercice existe dans la BDD", Toast.LENGTH_LONG).show();
            }
     
            exerciceBdd.close();
     
     
    		//fin gestion base de donnee
    Ensuite j'ai créé une classe MaBaseDeDonnée

    contenant ceci :

    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
    package org.pepimobil;
     
    import java.text.SimpleDateFormat;
    import java.util.Date;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class MaBaseDeDonnee extends SQLiteOpenHelper {
     
    	private static final String TABLE_EXERCICE = "table_exercice";
    	private static final String TABLE_SCORE = "table_score";
    	private static final String COL_ID = "ID";
    	private static final String COL_NOM_EXERCICE = "NomExercice";
    	private static final String COL_ID_EXERCICE = "id_exercice";
    	private static final String SCORE = "value";
    	private static final String DATE = "date";
     
    	private static final String CREATE_BDD = "CREATE TABLE " + TABLE_EXERCICE + " ("+ COL_ID + "INTEGER PRIMARY KEY AUTOINCREMENT, "+ COL_NOM_EXERCICE + " TEXT NOT NULL;)";
    	//private static final String CREATE_BDD2 = "CREATE TABLE " + TABLE_SCORE + " ("+ COL_ID_EXERCICE +"INTEGER DEPEND TABLE_EXERCICE, "+ SCORE +"INTEGER NOT NULL;)";
     
    	public MaBaseDeDonnee(Context context, String name, CursorFactory factory,	int version) {
    		super(context, name, null, version);
    		// TODO Auto-generated constructor stub
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		// TODO Auto-generated method stub
    		db.execSQL(CREATE_BDD);
    		//db.execSQL(CREATE_BDD2);
    	}
     
     
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		// TODO Auto-generated method stub
     
    	}
     
    }
    Et une derniere class JeuBdd

    Contenant ceci :

    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
    package org.pepimobil;
     
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
     
    public class JeuBdd {
     
    	private static final int VERSION_BDD = 1;
    	private static final String NOM_BDD = "score_jeu.db";
     
    	private static final String TABLE_EXERCICE = "table_exercice";
    	private static final String COL_ID = "ID";
    	private static final int NUM_COL_ID = 0;
    	private static final String COL_NOM_EXERCICE = "EXERCICE 1";
    	private static final int NUM_COL_NOM_EXERCICE = 1;
     
    	private SQLiteDatabase bdd;
     
    	private MaBaseDeDonnee maBaseSQLite;
     
    	public JeuBdd(Context context){
    		//On créer la BDD et sa table
    		maBaseSQLite = new MaBaseDeDonnee(context, NOM_BDD, null, VERSION_BDD);
    	}
     
    	public void open(){
    		//on ouvre la BDD en écriture
    		bdd = maBaseSQLite.getWritableDatabase();
    	}
     
    	public void close(){
    		//on ferme l'accès à la BDD
    		bdd.close();
    	}
     
    	public SQLiteDatabase getBDD(){
    		return bdd;
    	}
     
    	public long insertExercice(ExerciceActivity exercice){
    		//Création d'un ContentValues (fonctionne comme une HashMap)
    		ContentValues values = new ContentValues();
    		//on lui ajoute une valeur associé à une clé (qui est le nom de la colonne dans laquelle on veut mettre la valeur)
    		values.put(COL_ID, exercice.getId());
    		values.put(COL_NOM_EXERCICE, exercice.getNom_exercice());
    		//on insère l'objet dans la BDD via le ContentValues
    		return bdd.insert(TABLE_EXERCICE, null, values);
    	}
     
    	public int updateLivre(int id, ExerciceActivity exercice){
    		//La mise à jour de l exercice dans la BDD fonctionne plus ou moins comme une insertion
    		//il faut simple préciser quelle exercice on doit mettre à jour grâce à l'ID
    		ContentValues values = new ContentValues();
    		values.put(COL_ID, exercice.getId());
    		values.put(COL_NOM_EXERCICE, exercice.getNom_exercice());
    		return bdd.update(TABLE_EXERCICE, values, COL_ID + " = " +id, null);
    	}
     
    	public int removeExerciceWithID(int id){
    		//Suppression d'un exercice de la BDD grâce à l'ID
    		return bdd.delete(TABLE_EXERCICE, COL_ID + " = " +id, null);
    	}
     
    	public ExerciceActivity getExerciceWithId(int id){
    		//Récupère dans un Cursor les valeur correspondant à un exercice contenu dans la BDD (ici on sélectionne le exercice grâce à son id)
    		Cursor c = bdd.query(TABLE_EXERCICE, new String[] {COL_ID, COL_NOM_EXERCICE}, COL_ID + " LIKE \"" + id +"\"", null, null, null, null);
    		return cursorToExercice(c);
    	}
     
    	//Cette méthode permet de convertir un cursor en un exercice
    	private ExerciceActivity cursorToExercice(Cursor c){
    		//si aucun élément n'a été retourné dans la requête, on renvoie null
    		if (c.getCount() == 0)
    			return null;
     
    		//Sinon on se place sur le premier élément
    		c.moveToFirst();
    		//On créé un exercice
    		ExerciceActivity exercice = new ExerciceActivity(0, null);
    		//on lui affecte toutes les infos grâce aux infos contenues dans le Cursor
    		exercice.setId(c.getInt(NUM_COL_ID));
    		exercice.setNom_exercice(c.getString(NUM_COL_NOM_EXERCICE));
    		//On ferme le cursor
    		c.close();
     
    		//On retourne le exercice
    		return exercice;
    	}
    }
    Hors ça ne fonctionne pas , aurais-je passé à coté de quelquechose ?

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2011
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2011
    Messages : 67
    Par défaut
    Qu'entends tu par ça ne fonctionne pas ? Je n'ai pas envie de passer tout le code en revue inutilement, donc si tu as une Stacktrace, donne là nous ça ira plus vite :-)

    Lionel

    PS: Je ne sais pas si tu as déjà lu ça : http://www.vogella.com/articles/Andr...e/article.html , mais c'est assez intéressant.

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Janvier 2003
    Messages : 72
    Par défaut
    Je sais pas si c'est ça mais le nom des colonnes avec des espaces, par principe j'évite, on sait jamais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	private static final String COL_NOM_EXERCICE = "EXERCICE 1";
    Sinon ton code (à première vue) à l'air correct, passe ta base en version 2 pour la regénérer, peut-être que des bugs persistent de tes premières compilations.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Voici le log quand je compile :

    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
    11-15 09:49:57.432: W/dalvikvm(418): threadid=1: thread exiting with uncaught exception (group=0x40014760)
    11-15 09:49:57.442: E/AndroidRuntime(418): FATAL EXCEPTION: main
    11-15 09:49:57.442: E/AndroidRuntime(418): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.pepimobil/org.pepimobil.ExerciceActivity}: java.lang.InstantiationException: org.pepimobil.ExerciceActivity
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1739)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1831)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread.access$500(ActivityThread.java:122)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1024)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.os.Handler.dispatchMessage(Handler.java:99)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.os.Looper.loop(Looper.java:132)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread.main(ActivityThread.java:4123)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at java.lang.reflect.Method.invokeNative(Native Method)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at java.lang.reflect.Method.invoke(Method.java:491)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at dalvik.system.NativeStart.main(Native Method)
    11-15 09:49:57.442: E/AndroidRuntime(418): Caused by: java.lang.InstantiationException: org.pepimobil.ExerciceActivity
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at java.lang.Class.newInstanceImpl(Native Method)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at java.lang.Class.newInstance(Class.java:1301)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.Instrumentation.newActivity(Instrumentation.java:1022)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1730)
    11-15 09:49:57.442: E/AndroidRuntime(418): 	... 11 more

  5. #5
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Booyakha , j'ai enlevé les espaces et remplacer par "_" , et passé en version 2 mais ça ne change rien j'ai toujours l'erreur dans le log au dessus.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 277
    Par défaut
    Bon je pense pour faire plus simple , de partir sur un exemple de ce que je cherche à faire , je compte sur vous pour me guider en chemin.

    J'établie juste le début d'une création de base de donnée.
    L'objectif étant de créer la base , d'y mettre un champ ID auto increment, et un champ stockant le nom de l'exercice.

    Je pense que jusque là vue le code que je vous présente en dessous ça semble correct ...

    Class MainActivity :

    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
    package com.example.testbase;
     
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.Menu;
     
    public class MainActivity extends Activity {
     
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
     
     
        }
     
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            getMenuInflater().inflate(R.menu.activity_main, menu);
            return true;
        }
    }
    Class MyDatabase :

    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
    package com.example.testbase;
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
     
    public class MyDatabase extends SQLiteOpenHelper {
    	public static final String EXERCICE_KEY = "id";
    	public static final String EXERCICE_NOM = "nomExercice";
    	public static final String EXERCICE_TABLE_NAME = "Exercice";
     
    	public static final String EXERCICE_TABLE_CREATE =
    		    "CREATE TABLE " + EXERCICE_TABLE_NAME + " (" +
    		     EXERCICE_KEY + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
    		      EXERCICE_NOM + " TEXT);";
     
     
    	public MyDatabase ( Context context , String name , CursorFactory factory ,
    			int version ) {
    		super ( context , name , factory , version );
    	}
    	public void onCreate ( SQLiteDatabase db ) {
    		db.execSQL(EXERCICE_TABLE_CREATE);
    	}
     
    	public static final String EXERCICE_TABLE_DROP = "DROP TABLE IF EXISTS " + EXERCICE_TABLE_NAME + ";";
     
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    	  db.execSQL(EXERCICE_TABLE_DROP);
    	  onCreate(db);
    	}
     
    }
    Class Exercice :

    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
    package com.example.testbase;
     
    public class Exercice {
     
    	private long id;
    	private String nomExercice;
     
    	public Exercice(long id, String nomExercice) {
    		super();
    		this.id = id;
    		this.nomExercice = nomExercice;
    	}
     
    	public long getId() {
    		return id;
    	}
     
    	public void setId(long id) {
    		this.id = id;
    	}
     
    	public String getNomExercice() {
    		return nomExercice;
    	}
     
    	public void setNomExercice(String nomExercice) {
    		this.nomExercice = nomExercice;
    	}
     
    }
    Maintenant je vois pas trop la suite pour Ajouter un enregistrement , afficher la liste des enregistrements etc ...


    Je bloque à ce niveau.

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

Discussions similaires

  1. [PDO] Représentation des données sqlite sous forme de tableau HTML
    Par boulamite dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2008, 18h45
  2. Classe de gestion de base de données SQLITE
    Par Munkey74 dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 1
    Dernier message: 09/08/2007, 16h50
  3. Hashage & Optimisation stockage données
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 11/04/2007, 23h20
  4. Stockage données de type inconnu
    Par jmartell dans le forum Administration
    Réponses: 3
    Dernier message: 06/06/2006, 14h49

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