2012-09-20 1 views
0

ma requête pour l'employé tri en fonction de département est cerequête Android Sqlite sur le tri

public Cursor fetchDept(String dept)throws SQLException 
{ 
Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}, KEY_DEPT + "=" ,new String[]{dept}, null, null, null, KEY_DEPT); 
if (c!= null) { 
    c.moveToFirst(); 
} 
return c; 

}

j'ai passé la valeur de la classe d'activité à cette requête comme celui-ci

{ 
     db.open(); 
     Cursor c=db.fetchDept(dept); 

     if (c!= null) { 
      c.moveToFirst(); 
      do 
      { 
      if(dept.equals(c.getString(3))) 
      { 

     Toast.makeText(this,"found",Toast.LENGTH_LONG).show(); 
     return; 
      } 
      //c.getString(1) +c.getString(2)+ c.getString(4) 
      else 
      { 
       Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show(); 
       return ; 
      } 
      }while(c.moveToNext()); 
     } 

quand l'exécution de cette application se ferme de force. si quelqu'un peut aider les pls à aider! est l'argument de passage et l'appel db.query est correct dans le ci-dessus ??

+1

Si votre application tombe en panne, vous devez _always_ publier le LogCat. – Sam

Répondre

1

Vous avez pas posté le LogCat, mais il y a quelques choses qui sautent à moi:

D'abord, si vous utilisez le paramètre whereArgs vous devez utiliser le caractère de substitution ?:

Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}, 
     KEY_DEPT + "=?", new String[]{dept}, null, null, null, KEY_DEPT); 
// You forgot this:^

(point mineur: vous ne demandez que l'un KEY_DEPT si le tri des résultats par KEY_DEPT est inefficace.)

Deuxièmement, vous demandez la quatrième colonne:

dept.equals(c.getString(3)) 

mais votre curseur ne comporte que trois colonnes:

new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE} 
// Columns:  0 , 1  , 2  , no column 3 

Troisièmement,SQLiteDatabase#query() aura toujours retourner un curseur. Ce curseur peut être vide mais il ne sera pas null. Aussi votre requête renvoie uniquement les résultats où KEY_DEPT égaux dept, de sorte que vous n'avez pas besoin de vérifier à nouveau ... Essayez ce code à la place:

db.open(); 
Cursor c=db.fetchDept(dept); 

// Check any rows that were returned 
if(c.getCount() > 0) { 
    Toast.makeText(this,"found "+c.getCount()+" matches",Toast.LENGTH_LONG).show(); 
    while (c.moveToNext()) { 
     // Do something extra with each result 
    } 
} 
// The Cursor is empty (No departments does not exist with the name in dept) 
else { 
    Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show(); 
} 

(! Ne pas oublier de fermer votre curseur et base de données lorsque vous avez terminé)

+0

ma base de données a cinq colonnes à savoir KEY_ROWID, KEY_NAME, KEY_DESGN, KEY_DEPT, KEY_PHONE mais je n'ai besoin que de nom, desgn, phonebase sur dept n donné et trié par département – Chetan

+0

Mais votre _Cursor_ a seulement trois et ces colonnes sont indexées à partir de '0', donc 'getString (3)' est hors limites. De toute façon, si vous avez encore besoin d'aide, vous devez poster votre LogCat pour que nous puissions voir ce qui se passe et où. – Sam

+0

je l'ai corrigé mais maintenant un problème comment commander les enregistrements en utilisant le nom de la colonne et imprimer les enregistrements en mode texte? – Chetan