Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Android] Afficher une base de donnée

Sujet résolu
    27 décembre 2012 à 17:58:00

    Bonjour,

    J'ai un petit problème. Je voudrais afficher toutes les données présentes dans ma table. Le soucis ce que d'après des testes, celle-ci est vide... voici des morceaux de codes :

    L'activité principale :
    public class MainActivity extends Activity {
    
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		//Création d'une instnce de Score
    		ScoreDAO sDAO = new ScoreDAO(this);
    		
    		//Création d'un score
    		Score s = new Score(new String("Thanos"), new String("986"));
    		Score s2 = new Score(new String("Thanos"), new String("986"));
    		Score s7 = new Score(new String("Thanos"), new String("986"));
    		Score s4 = new Score(new String("Thanos"), new String("986"));
    		Score s5 = new Score(new String("Thanos"), new String("986"));
    		
    		// On ouvre la base de donnée pour écrire dedans
    		sDAO.open();
    		
    		System.out.println("\n\n\n\n");
    		
    		// On y ajoute le score
    		sDAO.addScore(s);
    		sDAO.addScore(s2);
    		sDAO.addScore(s7);
    		sDAO.addScore(s5);
    		sDAO.addScore(s4);
    		
    		
    		System.out.println(sDAO.showTable());
    	}
    }
    


    La classe qui permet de gérer la table :
    public class ScoreDAO
    {
    	//...
    	
    	private static final int NUMERO_COLONNE_ID = 0;
    	
    	//...
    	
    	private static final int NUMERO_COLONNE_PLAYER= 1;
    	
    	//...
    	
    	private static final int NUMERO_COLONNE_SCORE = 2;
    	
    	private SQLiteDatabase _db;
    	private ScoreDB _scoredb;
    	
    	//...
    	
    	public long addScore(Score s)
    	{
    		ContentValues v = new ContentValues();
    			v.put(COLONNE_PLAYER, s.get_player());
    			v.put(COLONNE_SCORE, s.get_score());
    			
    			return this.get_db().update(TABLE_SCORE, v, COLONNE_ID + " = " + s.get_id(), null);
    	}
    
    	//...
    	
    	public Score cursorToScore(Cursor c)
    	{
    		// S'il n'y a aucune ligne.
    		if(c.getCount() == 0)
    			return null;
    		
    //		c.moveToFirst();
    		
    		Score s = new Score();
    		
    		// On affecte toute les inforamtions de la ligne à Score.
    		s.set_id(c.getInt(NUMERO_COLONNE_ID));
    		s.set_player(c.getString(NUMERO_COLONNE_PLAYER));
    		s.set_score(c.getString(NUMERO_COLONNE_SCORE));
    		
    		c.close();
    		
    		return s;
    	}
    	
    	public String showTable()
    	{
    		Cursor c = get_db().rawQuery("SELECT * FROM " + TABLE_SCORE, null);
    		String s = new String("");
    		Score score = new Score();
    		
    		if(c.getCount() == 0)
    			return "Table Vide";
    		
    		c.moveToFirst();
    		
    		do
    		{
    			score = cursorToScore(c);
    			
    			s += score.get_id() + " | " + score.get_player() + " | " + score.get_score() + "\n";
    		}while(c.moveToNext());
    		
    		return s;	
    	}
    }
    


    Quand je compile ça me dis que la table est vide (grâce à l'affichage ligne 57 de la classe ScoreDAO). Est-ce ma méthode addScore(...) qui est mal coder ? Peut-être ma requête qui est fausse ? Mon Cursor mal initialiser ??

    Merci,
    • Partager sur Facebook
    • Partager sur Twitter
      28 décembre 2012 à 8:49:31

      La syntaxe pour une insertion est la suivante :

      bdd = getWritableDatabase();
      bdd.insert(object.getClassName(), null, values(object,true));
      bdd.close();
      


      Il te faut aussi une classe héritant de SQLiteOpenHelper (contenant notamment getWritableDatabase()) avec l'objet "SQLiteDatabase bdd"

      Bref, je te conseille de revoir ta façon de structurer ta base dans ton code. Ce code là ne devrait pas se trouver dans le DAO mais justement dans la classe héritant de SQLiteOpenHelper.

      Regarde cet article pour saisir la logique -> http://www.tutomobile.fr/comment-utili [...] 9/19/10/2010/

      Bon courage.
      • Partager sur Facebook
      • Partager sur Twitter
        28 décembre 2012 à 11:16:52

        Ben en faite j'ai codé en fonction de ce tuto ^^' et je n'ai pas montré tout mon code, j'ai aussi la classe qui hérite de SQLiteOpenHelper avec comme méthode onCreate et onUpgrade, et j'ai ScoreDAO qui me permet de "gérer" la base de donnée.

        J'ai mis à jour la méthode addScore avec instert(...) et finalement ça marche =), merci. Après j'ai eu un soucis avec la méthode showTable. Une exception parce que je "fermais" le cursor dans cursorToScore alors que je continuais à l'utiliser (du coups maintenant je le ferme à la fin de la méthode showTable)... Et une boucle infinie parce que je retournais toujours au début dans cursorToScore. ^^

        Merci, pour votre aide ^^ =)
        • Partager sur Facebook
        • Partager sur Twitter
          28 décembre 2012 à 14:09:06

          C'est vrai que c'est un peu galère à manier au début mais avec les exceptions on s'en sort au bout de 3,4 essais ^^

          Bon courage pour la suite.
          • Partager sur Facebook
          • Partager sur Twitter

          [Android] Afficher une base de donnée

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown