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, Update & android problème


Sujet :

Android

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Points : 27
    Points
    27
    Par défaut Sqlite, Update & android problème
    Bonjour j'ai un soucis avec mon appli android.
    J'ai une classe générique qui doit permettre de modifier le nom du médicament normal dans une prescription. voici un bout de code :

    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
    protected void onListItemClick(ListView l, View v, int position, long id){
        	int pos = position + 1;
        	super.onListItemClick(l, v, position, id);
        	selectMedoc(pos, id);
    	}
     
    	public void selectMedoc(int pos, long id){
    		Intent intent = new Intent(RechercheDeGenerique.this,ReceiveP.class);
    		MedicamentRef medicamentchoisi= mDbHelper.getMedRef(id);
    		String medRefNom = medicamentchoisi.getMednom();
    		mDbHelper.replaceByGeneric(medRefNom,idMedInPres,idPres);
    		/*String codecip = medicamentchoisi.getMedcodecip();
    		String nommed = medicamentchoisi.getMednom();
    		String princact = medicamentchoisi.getMedprincact();
    		String formepharma = medicamentchoisi.getMedformepharma();
    		String medvoixadm = medicamentchoisi.getMedvoixadm();*/
     
     
     
    		//Toast.makeText(RechercheDeGenerique.this, medRefNom, Toast.LENGTH_SHORT).show();
     
    		startActivity(intent);
    		//finish();
    Mon problème est sur cette ligne la : mDbHelper.replaceByGeneric(medRefNom,idMedInPres,idPres);

    Je fais appelle a une méthode qui se trouve être celle la ou je fais un UPDATE j'ai verifié avant si medRefNom, idMedInPres et idPres n'etait pas null.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void replaceByGeneric(String nomGeneric, String idMedInPres, String idPres){
        ContentValues args = new ContentValues();
        args.put(MED_NOM, nomGeneric);
     
         mDb.update(DATABASE_TABLE_MEDICAMENT, args, MED_ID + "=" + idMedInPres + " AND " + MED_F_ID_PRES + "=" + idPres, null);
     
    }
    Le soucis c'est que mon code me renvoi :
    index 0 requested with a size of 0

    Je ne sais vraiment pas d'ou viens le problème

    Merci beaucoup

  2. #2
    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
    Bonjour,
    est ce que vous tentez de changer le nom d'un médicament par un autre? c'est ça? pourquoi vous voulez changer son identifiant? je pense que l'identifiant d'un médicament dois être unique et auto-incrémenté (la clé primaire) donc si vous voulez changer le nom ne modifier pas son id.
    "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

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Oui c'est ca. Mais je ne change pas le numéro, l'id du medicament est dans les clauses where

  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
    Citation Envoyé par morphine63 Voir le message
    Oui c'est ca. Mais je ne change pas le numéro, l'id du medicament est dans les clauses where
    et le nom medicament prescrit est saisie par l'utilisateur de l'application, c'est ça? ou déjà stocké lui aussi dans la Base de données?
    "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
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Merci deja pour tes reponses.
    Oui le fait j'ai une table MedicamentRef (avec la base des médicament)
    Et une table médicament qui comporte les médicaments de la prescription
    Et je veux mettre le nom du générique a la place du nom du medicament dans la prescription

  6. #6
    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
    Bonjour,

    Le soucis c'est que mon code me renvoi :
    index 0 requested with a size of 0
    Je pense donc que tu recois une exception avec ce texte dedans c'est bien cela ? Ce texte ressemble à l'exception "IndexOutOfBoundException" qui est lancée quand on utilise un mauvais index sur un tableau, ce qui ne correspond absolument pas au code montré...
    Ce qu'il nous faut, est donc la trace complète de l'exception (depuis le logcat, ctrl+c,ctrl+v ici entre balises code), mais à mon avis ce n'est pas dans le code montré que cela se passe.

    Pour ce qui est du code montré, la clause where est dangereuse....
    Voici comment on écrit (généralement) le code SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private static final REPLACE_WHERE_CLAUSE = 
         MED_ID+"=? and "+MED_F_ID_PRES+"=?";
     
    public void replaceByGeneric(String nomGeneric, String idMedInPres, String idPres){
        ContentValues args = new ContentValues();
        args.put(MED_NOM, nomGeneric);
     
         mDb.update(DATABASE_TABLE_MEDICAMENT, args, REPLACE_WHERE_CLAUSE , new String[] { idMedInPres, idPres } );
    }
    La raison est qu'il faut *encoder* les valeurs passées (quid d'un idMedInPres null ? ou contenant un 'quote' ?) une construction de clause where "à la main" est excessivement dangereuse.

    Je n'ai pas vu non plus de gestion de transaction, donc j'imagine que c'est géré "plus haut".
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 42
    Points : 27
    Points
    27
    Par défaut
    Merci pour ta réponse.
    Je viens de remplacé le code par le tiens mais l'erreur reste la même voici le log :

    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
    02-12 13:10:15.107: D/AndroidRuntime(16438): Shutting down VM
    02-12 13:10:15.107: W/dalvikvm(16438): threadid=1: thread exiting with uncaught exception (group=0x4132a300)
    02-12 13:10:15.131: E/AndroidRuntime(16438): FATAL EXCEPTION: main
    02-12 13:10:15.131: E/AndroidRuntime(16438): android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.database.AbstractCursor.checkPosition(AbstractCursor.java:418)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at packages.prescripteur.DataBasePrescription.getMedRef(DataBasePrescription.java:361)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at packages.prescripteur.RechercheDeGenerique.selectMedoc(RechercheDeGenerique.java:77)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at packages.prescripteur.RechercheDeGenerique.onListItemClick(RechercheDeGenerique.java:72)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.app.ListActivity$2.onItemClick(ListActivity.java:319)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.widget.AdapterView.performItemClick(AdapterView.java:298)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.widget.AbsListView$PerformClick.run(AbsListView.java:2855)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.widget.AbsListView$1.run(AbsListView.java:3529)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.os.Handler.handleCallback(Handler.java:615)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.os.Handler.dispatchMessage(Handler.java:92)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.os.Looper.loop(Looper.java:137)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at android.app.ActivityThread.main(ActivityThread.java:4745)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at java.lang.reflect.Method.invokeNative(Native Method)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at java.lang.reflect.Method.invoke(Method.java:511)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    02-12 13:10:15.131: E/AndroidRuntime(16438): 	at dalvik.system.NativeStart.main(Native Method)
    02-12 13:10:15.170: D/dalvikvm(16438): GC_CONCURRENT freed 133K, 2% free 11132K/11335K, paused 15ms+4ms, total 55ms
    Merci encore

  8. #8
    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
    Oui oui, c'est ce que je disais, l'erreur n'a aucun lien avec le code montré initialement....

    Comme bien indiqué dans la "trace" de l'erreur...
    at packages.prescripteur.DataBasePrescription.getMedRef(DataBasePrescription.java:361)
    Elle se situe ligne 361 du fichier src/packages/prescripteur/DataBasePrescription.java
    Dans la fonction "getMedRef" où on utilise très certainement un cursor vide.

    Il est possible que ce soit lié à la fonction appelante:
    (ligne 77 du fichier RechercheDeGenerique.java)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2013, 16h29
  2. [SQLite] Update via PHP
    Par Blueangel3109 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/03/2008, 13h03
  3. [SQLite] update en sqlite
    Par patk29 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 29/04/2007, 08h36
  4. requete update qui pose problème
    Par kirian dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/02/2007, 11h20
  5. [INTERBASE][UPDATE SET WHERE] problème de requete
    Par exclusif dans le forum Langage SQL
    Réponses: 3
    Dernier message: 06/03/2006, 21h10

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