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 :

Type générique retourné par un curseur


Sujet :

Android

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut Type générique retourné par un curseur
    Bonjour,

    Je travaille sur un projet Android qui nécessite une interaction avec une base de données SQLite.

    Après avoir fait un select sur une table, j'aimerais récupérer les valeurs avec un objet Cursor c (ex : c.getInt(position) pour récupérer un entier, c.getString(position) pour récupérer une chaine).

    Le souci c'est que je veux que cela soit assez générique, de telle sorte que je puisse récupérer la valeur sans pour autant connaître son type.

    Pour cela, j'ai cherché une méthode du genre c.get(postion) mais sans succès.

    Quelqu'un saurait-il m'indiquer comment procéder ?

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 79
    Points
    79
    Par défaut public abstract int getType (int columnIndex)
    En consultant la doc je ne pense pas que ce soit possible.
    Par contre on peut contourner le problème en créant une méthode qui utilise getType(int columnIndex) puis un switch case qui selon le type de données utilisera soit getFloat(int columnIndex) , getInt etc... en fonction du type de la donnée.
    Cordialement

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 79
    Points
    79
    Par défaut getType
    J'ai pondu vite fait une Classe, non testée, si quelqu'un a des suggestions... On lui passe en paramètre l'index de la colonne et on récupère la donnée avec getDonnée(). Soucis : getType() n'existe que depuis la v3 alors qu'on developpe encore bcp pour la v 2.1.
    L'alternative c'est de récuperer le type de la donnée par une requete SQL
    du type : select Field1, typeof(Field1) from MyTable
    Désolé ça fait un peu bricolage...
    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
     
     
    import com.desiGn.space.R;
     
    import android.database.Cursor;
     
    public class GenericCursor {
    	public GenericCursor(int colonneIndex) {
    		this.columnIndex = colonneIndex;
    	}
     
    	Cursor cursor;
    	private Object donnée = new Object();
    	int columnIndex = 0;
     
    	public Object getDonnée() {
    		return donnée;
    	}
     
    	/*
    	 * getType renvoie un int qui permet d'identifier le type de donnée
    	 */
    	public void getData(int columnIndex) {
    		switch (cursor.getType(columnIndex)) {
    		case 4: {
    			donnée = cursor.getBlob(columnIndex);
    			break;
    		}
    		case 2: {
    			donnée = cursor.getFloat(columnIndex);
    			break;
    		}
    		case 1: {
    			donnée = cursor.getInt(columnIndex);
    			break;
    		}
    		case 0: {
    			donnée = cursor.getString(columnIndex);
    			break;
    		}
     
    		}
     
    	}
     
    }

  4. #4
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    56
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 56
    Points : 59
    Points
    59
    Par défaut
    Bonjour deapBreak merci pour les reponses et les efforts consentis. En fait y a un petit souci à la ligne 24. getType n'est pas accessible. pour rappel j'utilise android 2.3.3

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2011
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 59
    Points : 79
    Points
    79
    Par défaut s q l
    Je reviens vers toi car ta question m'interpelle et que mes réponses hâtives recèlent des erreurs. Pourquoi faire simple quand on peut se compliquer la vie. Pourquoi as-tu besoin d'un cursor générique?
    Comment traites-tu la donnée retournée : affichage, calculs...
    Je ne suis pas un spécialiste de SQL. Mais je pense qu'en simplifiant tu dois partir de tes tables. Ta fonction ressemblera à ça getData(nomColonne, indexColonne) ensuite car tu sais quel type de données sont dans tes colonnes tu utilise les méthodes adéquates pour te renvoyer la donnée en fonction du nom de la colonne(qui détermine le type de données)
    A toi de voir pour la suite...
    Cordialement

Discussions similaires

  1. type complexe retourné par une fonction
    Par redwire dans le forum Oracle
    Réponses: 2
    Dernier message: 01/03/2009, 10h22
  2. [MySQL] Type du résultat retourné par MySQL
    Par colodoc dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/10/2008, 02h37
  3. Réponses: 2
    Dernier message: 24/12/2007, 09h53
  4. [MySQL] le type de donnée retourné par mysql_fetch_assoc est fantaisiste
    Par guidav dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 04/06/2007, 16h07
  5. Type incompatible retourné par une méthode
    Par beegees dans le forum Langage
    Réponses: 4
    Dernier message: 22/04/2007, 19h23

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