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 :

SQLite sur Android Data Framework


Sujet :

Android

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 11
    Points
    11
    Par défaut SQLite sur Android Data Framework
    Bonjour,
    Bon alors, je me met doucement au dev Android parce que j'ai que ça à foutre en ce moment et que ça me botte bien. (Java :bave: )

    Donc, création du projet, Greendroid qui fonctionne bien, quelques activity plus tard, tentative d'utilisation de SQLite grace au Android Data Framework qui passe par un fichier XML pour formatter ses tables.
    Sauf que ça marche super pas.

    XML bien placé dans res/xml/tables.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?xml version="1.0" encoding="UTF-8"?>
    <database name="devis_db" version="1">
    	<field name="titre" obligatory="true" type="text" size="128">
    	</field>
    	<field name="auteur" obligatory="false" type="text" size="128"></field>
    	<table name="livres" to-string="%titre%">
    	</table>
    </database>
    La méthode qui est sensé ajouter de la donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public long addLivre(Livre l){
    		// On créé un objet Entity avec en paramètre le nom de la table (ici Livre)
    		Entity ent = new Entity("livres"); 
     
     
    		ent.setValue("titre", l.getTitre());
    		ent.setValue("auteur", l.getAuteur());
    		ent.save();
     
    		return ent.getId();
    	}
    Que j'utilise par un très simple mais pas du tout efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Livre livre = new Livre();
    		livre.setAuteur("");
    		livre.setTitre(titre);
     
    		SqliteProvider sql = new SqliteProvider(getApplicationContext());
    		sql.addLivre(livre);
    Le problème est que l'insertion fonctionne bien. Il y a bien une entrée dans la table, mais tout ce qui est renvoyé c'est null a part l'id.

    Est-ce que quelqu'un a une idée parce que là je vais craquer.

    ---------------
    Une autre question, est-ce qu'il est possible sous Android de persister les données par sérialisation d'objets en xml ? Est-ce que c'est 'propre' ?

    Merci les gens !

  2. #2
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Bonjour,

    C'est quoi cette classe SqliteProvider ?
    Peux tu nous la montrer ?

    Tu as un tutoriel sur le sujet :
    http://a-renouard.developpez.com/tut...ndroid/sqlite/

    Sinon si je reste sur ton idée tu as un tutoriel ici :
    http://thibault-koprowski.fr/2010/10...e-des-donnees/
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Java
    Inscrit en
    Février 2011
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2011
    Messages : 12
    Points : 11
    Points
    11
    Par défaut
    Merci de ta réponse !

    Concernant ton deuxième lien, c'est a partir de celui-ci que j'ai travaillé. Donc ma classe SqliteProvider viens de ce site mais je te met la mienne quand même, on sait jamais :


    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
    public class SqliteProvider {
    	private Context ctx;
    	public SqliteProvider(Context ctx){
            // Ici on ouvre la connexion avec la base sqlite
     		this.ctx = ctx;
    		try {
    			// Le deuxième paramètre correspond au paquet où est situé la classe
                DataFramework.getInstance().open(ctx, "com.collekt");
    		}
    		catch (Exception e) {		}
    	}
     
    	// Ajoute un Livre passé en paramètre puis retourne son ID
    	public long addLivre(Livre l){
    		// On créé un objet Entity avec en paramètre le nom de la table (ici Livre)
    		Entity ent = new Entity("livres"); 
     
    		// Il existe une methode setValue pour tous les types de données
    		ent.setValue("titre", l.getTitre());
    		ent.setValue("auteur", l.getAuteur());
    		ent.save();
    		// Pour récupérer l'id il faut toujours passer par cette fonction et non une requête
    		return ent.getId();
    	}
     
    	// Met à jour le Livre à partir de l'objet passé en paramètre
    	public boolean updateLivre(Livre l,long id){
     
    		// Pour récupérer un enregistrement il faut juste instancier l'objet Entity avec
    		// un paramètre Long correspondant à l'id de l'enregistrement
    		Entity ent = new Entity("livres",id);
     
    		// On peut ensuite modifier les valeurs
    		ent.setValue("titre", l.getTitre());
    		ent.setValue("auteur", l.getAuteur());
     
    		// Il ne faut surtout pas oublier de sauvegarder les changements
    		return ent.save();
    	}
     
    	// Supprime le Livre avec l'id en paramètre
    	public boolean removeLivre(long id){
    		Entity ent = new Entity("livres", id);
    		return ent.delete();
    	}                 
     
    	// Retourne le Livre avec l'ID en paramètre
    	public Livre getLivre(Long id){
    		Entity ent = new Entity("livres", id);
    		if(ent!=null)
    			return new Livre((String)ent.getValue("titre"), (String)ent.getValue("auteur"),ent.getId());
    		else
    			return new Livre();
    	}
     
    	// Retourne la liste de tout les Livres
     	public ArrayList getLivreList(){
    		// La méthode getEntityList(String table, String where, String order_by) permet d"effectuer un select sans la base
    		// Ici je n'avais pas besoin de filtrer
    		// pour info voici un exemple de requête filtrée:
    		// DataFramework.getInstance().getEntityList("produits", "devis_id = 3", "qte asc");
    		// Voici un exemple de parcours des résultats
    		// Iterator iter = categories.iterator();
    		// while (iter.hasNext()){
    		//      Entity ent = (Entity)iter.next();
    		//      System.out.println(ent.getString("nombre"));
    		// }
     
    		ArrayList<Entity> Livres_entities = DataFramework.getInstance().getEntityList("livres", "", "");
    		ArrayList<Livre> liste_Livres= new ArrayList();
    		for (Entity entity : Livres_entities) {
    			liste_Livres.add(new Livre(entity));
    		}
    		return liste_Livres;
    	} 
     
    	// Fermeture de la base de données
    	protected void destroy() {
    		DataFramework.getInstance().close();
    	}
    }

  4. #4
    Expert éminent

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Points : 9 149
    Points
    9 149
    Par défaut
    Désolé du retard de ma réponse :/

    Alors je suis une bille en espagnol , mais si j'ai bien compris il te manque la délcaration de la table

    Un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <database name="notes_db" version="2">
     
        <table name="categories" to-string="%name%">
        <field name="name" obligatory="true" type="name" size="128"/>
      </table>
    </database>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Entity ent = new Entity("categoria");
    ent.setValue("nombre", "Coche");
    ent.save();
    du coup pour toi cela serait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?xml version="1.0" encoding="UTF-8"?>
    <database name="devis_db" version="1">
            <table name="livre_table">
    	    <field name="titre" obligatory="true" type="text" size="128">
    	    </field>
    	    <field name="auteur" obligatory="false" type="text" size="128"></field>
                <field name="livre"></field>
            </table>
    </database>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public long addLives(Livre l){
    		// On créé un objet Entity avec en paramètre le nom de la table (ici Livre)
    		Entity ent = new Entity("livre_table"); 
     
     
    		ent.setValue("titre", l.getTitre());
    		ent.setValue("auteur", l.getAuteur());
                    ent.setValue("livre", l.getLivre());
    		ent.save();
     
    		return ent.getId();
    	}
    Enfin je pense a un trcu comme cela, si quelqu'un est motivé pour traduire le wiki du projet pour nous aider :
    http://code.google.com/p/androiddataframework/w/list
    Responsable Android de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Android, consulter la page cours
    N'hésitez pas à consulter la FAQ Android et à poser vos questions sur les forums d'entraide mobile d'Android.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/05/2015, 11h50
  2. Réponses: 0
    Dernier message: 19/03/2013, 16h33
  3. Réponses: 1
    Dernier message: 25/08/2009, 19h22
  4. Doc sur le Data warehousing?
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 16/09/2004, 10h53

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