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 :

Problème requête sélection avec SQLite


Sujet :

Android

  1. #1
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut Problème requête sélection avec SQLite
    Salut
    je suis débutante en développement android et j'ai besoin d'un petit coup de pouce au niveau de la manipulation de la base de données.
    je veux faire une sélection dans ma table selon la valeur de deux paramètres. comment l'écrire?
    selectionner libellé de la table formation où ville = ville et catégorie = catégorie

    voilà mon essai qui est faux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cursor c = bdd.query(TABLE_FORMATION, new String[] {COL_ID, COL_LIB, COL_VILLE, COL_CAT}, COL_LIB + " LIKE \"" + libellé +"\"" + " AND \"" + COL_VILLE + " LIKE \"" + ville +"\"" , null, null, null, null);
    Merci pour votre aide
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  2. #2
    Membre éprouvé
    Avatar de LinkinSelim
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Mars 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Mars 2006
    Messages : 365
    Points : 1 034
    Points
    1 034
    Par défaut
    Bonjour,

    Tu es sûre que l'erreur est au niveau de cette instruction ?

    Peut-tu être plus claire, le programme compile et à l'éxecution il provoque une erreur ? ou bien il ne compile même pas.

  3. #3
    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
    Déjà pas en écrivant les paramètres à la main....

    Cursor c = bdd.query(
    TABLE_FORMATION,
    new String[] {COL_ID, COL_LIB, COL_VILLE, COL_CAT},
    COL_LIB+" like ? and "+COL_VILLE+" like ?",
    new String[] { libellé , ville } ,
    null,null);
    Au passage... Java accepte "libellé" sans broncher ? Je te conseille de rester en ASCII pur pour les noms de variable/fonction/type ...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  4. #4
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    code de la fonction qui doit retourner la formation selon paramètre ville et catégorie:
    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
    public Formation getFormation(String ville, String catégorie){
     
    		//Récupère dans un Cursor les valeurs correspondant à un livre contenu dans la BDD (ici on sélectionne le livre grâce à son titre)
    		Cursor c = bdd.query(TABLE_FORMATION, new String[] {COL_ID, COL_LIB, COL_TEL, COL_EMAIL, COL_ADR, COL_VILLE, COL_CAT}, COL_VILLE + " LIKE \"" + ville +"\" and \"" + COL_CAT + " LIKE \"" + catégorie +"\"", null, null, null, null);
     
     
    		return cursorToFormation(c);
    	}
    private Formation cursorToFormation(Cursor c){
     
    		if (c.getCount() == 0)
    			return null;
     
     
    		c.moveToFirst();
     
    		Formation formation = new Formation();
     
    		formation.set_id(c.getInt(NUM_COL_ID));
    		formation.setLibellé(c.getString(NUM_COL_LIB));
    		formation.setTel(c.getString(NUM_COL_TEL));
    		formation.setEmail(c.getString(NUM_COL_EMAIL));
    		formation.setAdresse(c.getString(NUM_COL_ADR));
    		formation.setVille(c.getString(NUM_COL_VILLE));
    		formation.setCatégorie(c.getString(NUM_COL_CAT));
    		//On ferme le cursor
    		c.close();
     
     
    		return formation;
    	}
    la table formation dans base de données
    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
    public class MaBase extends SQLiteOpenHelper {
    	private static final String TABLE_FORMATION = "table_formation";
    	private static final String COL_ID = "_id";
    	private static final String COL_LIB = "libellé";
    	private static final String COL_TEL = "tel";
    	private static final String COL_EMAIL = "email";
    	private static final String COL_ADR = "adresse";
    	private static final String COL_VILLE = "ville";
    	private static final String COL_CAT = "catégorie";
     
     
    	private static final String CREATE_BDD = "CREATE TABLE " + TABLE_FORMATION + " ("
    	+ COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COL_LIB + " TEXT NOT NULL, "
    	 + COL_TEL + " TEXT NOT NULL, " + COL_EMAIL + " TEXT NOT NULL, " + COL_ADR + " TEXT NOT NULL, " + COL_VILLE + " TEXT NOT NULL, "+ COL_CAT + " TEXT NOT NULL);";
     
    	public MaBase(Context context, String name, CursorFactory factory, int version) {
    		super(context, name, factory, version);
    	}
     
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		//on crée la table à partir de la requête écrite dans la variable CREATE_BDD
    		db.execSQL(CREATE_BDD);
    	}
    }
    la fonction qui est écris dans le main qui doit normalement géré le clique sur le bouton "recherche" afin de retrouver la formation recherchée par l'utilisateur selon les paramètres ville et catégorie qu'il a choisis.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    	@Override
    	public void onClick(View arg0) {
    		// TODO Auto-generated method stub
     
    	    String catégorie = listeCat.getSelectedItem().toString();
    		String ville = listeVille.getSelectedItem().toString();
            liste = formationBdd.getFormation(ville, catégorie); 
    		 if (liste == null)
    		        Toast.makeText(Main2.this, "liste de formation vide ", Toast.LENGTH_LONG).show();
    		        else
    		        	Toast.makeText(Main2.this, "liste de formation " + liste.getCatégorie(), Toast.LENGTH_LONG).show();
     
    				}
    	}
    le rapport logCat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    12-12 22:21:59.365: E/AndroidRuntime(20556): android.database.sqlite.SQLiteException: near "Informatique": syntax error: , while compiling: SELECT _id, libellé, tel, email, adresse, ville, catégorie FROM table_formation WHERE ville LIKE "Tunis" and "catégorie LIKE "Informatique"
    Lorsque je clique sur le bouton "recherche" l'application s'arrete
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  5. #5
    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
    Et oui... c'est le danger d'écrire le SQL à la main ^^

    Mais bon, comme j'ai l'impression que mon premier message n'a pas été compris, je vais le redire une fois, sans plus d'espoir que cela: "on ne construit jamais du SQL avec les paramètres directement dedans, on les passe en paramètre de la fonction query" (voir message précédent) ce qui aurait aussi évité l'erreur ci-dessus.

    Ce qui est bien, c'est que la coloration syntaxique du forum montre directement le problême

    Et puis non, franchement, c'est pas bien d'utiliser des caractères spéciaux (comme les accents) dans les noms de colonnes / variables et autres ^^
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  6. #6
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Et oui... c'est le danger d'écrire le SQL à la main ^^

    Ce qui est bien, c'est que la coloration syntaxique du forum montre directement le problême
    Dans le main j'ai juste fais appel à la fonction qui cherche selon les paramètre ville et catégorie, la requete n'est pas définie dans le main, c'est dans une autre classe dans laquelle il y a toutes les manipulations base de données (requetes)

    voila l'appel:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste = formationBdd.getFormation(ville, catégorie)
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  7. #7
    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
    Non mais quand je dis "à la main" ça veut bien dire ... "à la main", "a la mano", "soi-même", "directement dans le code"...
    Pas "dans la fonction main()" (d'abord y en a pas sur Android... enfin si... mais on le voit pas)

    Et re-regarde bien ton message, la partie ou il y a le logcat... et l'erreur est indiquée en rouge.

    Qu'est ce qui est plus lisible ? entre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Cursor c = bdd.query(
             TABLE_FORMATION, 
             new String[] {COL_ID, COL_LIB, COL_TEL, COL_EMAIL, COL_ADR, COL_VILLE, COL_CAT}, 
             COL_VILLE + " LIKE \"" + ville +"\" and \"" + COL_CAT + " LIKE \"" + catégorie +"\"", 
              null, null, null, null);
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Cursor c = bdd.query(
             TABLE_FORMATION, 
             new String[] {COL_ID, COL_LIB, COL_TEL, COL_EMAIL, COL_ADR, COL_VILLE, COL_CAT}, 
             COL_VILLE + " LIKE ? and " + COL_CAT + " LIKE ?",
             new String[] { ville, catégorie }, 
             null, null, null);
    En plus le driver s’occupera de faire toutes les transformations nécessaires....
    (essayes de passer une ville avec le caractère " dedans... tu verras...)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    Citation Envoyé par nicroman Voir le message
    Non mais quand je dis "à la main" ça veut bien dire ... "à la main", "a la mano", "soi-même", "directement dans le code"...
    Pas "dans la fonction main()" (d'abord y en a pas sur Android... enfin si... mais on le voit pas)

    Et re-regarde bien ton message, la partie ou il y a le logcat... et l'erreur est indiquée en rouge
    désolée si je ne comprends pas bien, mais voulez vous dire de directement saisir les paramètres ville et catégorie dans le code???
    En fait je ne les ai pas inséré directement dans le code, y'a une liste de villes et une liste de catégories. l'utilisateur à séléctionné: pour ville: Tunis et pour catégorie: Informatique.
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

  9. #9
    Membre actif Avatar de janyoura
    Femme Profil pro
    étudiante ingénierie informatique
    Inscrit en
    Mars 2012
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : étudiante ingénierie informatique

    Informations forums :
    Inscription : Mars 2012
    Messages : 365
    Points : 279
    Points
    279
    Par défaut
    oui j'ai compris enfin, lorsque j'ai lu encore une fois l'erreur. "catégorie LIKE" alors que ça devrait etre catégorie LIKE (sans guillemet)
    Merci
    "Scientists dream about doing great things. Engineers do them.”

    La réussite après tant de travail est un sentiment à vivre

    Si ton message est résolu, il y a un bouton qui est fait pour ça :
    Il se trouve tout en bas de la conversation !

    N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 22/12/2007, 14h06
  2. Requête sélection avec comme critère: champ vide
    Par droxyme dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/10/2007, 10h24
  3. problème de sélection avec les champs vides
    Par danathane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/08/2007, 16h45
  4. [SQL]Problème requête sélection
    Par ThieBEN dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/04/2007, 16h04
  5. Problème de sélection avec LIKE
    Par Mr. Smith dans le forum Requêtes
    Réponses: 4
    Dernier message: 20/08/2006, 19h37

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