Comment obtenir le nombre de lignes dans sqlite en utilisant Android?

Je crée un gestionnaire de tâches. J’ai une liste de tâches et je veux quand je clique sur un nom de liste de tâches particulier s’il est vide, puis il passe à l’activité Ajouter une tâche mais s’il a 2 ou 3 tâches, il affiche les tâches sous forme de liste.

J’essaie de compter dans la liste. ma requête de firebase database est comme:

public Cursor getTaskCount(long tasklist_Id) { SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor= db.rawQuery("SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?", new Ssortingng[] { Ssortingng.valueOf(tasklist_Id) }); if(cursor!=null && cursor.getCount()!=0) cursor.moveToNext(); return cursor; } 

Dans mon activité:

 list_tasklistname.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView arg0, android.view.View v, int position, long id) { db = new TodoTask_Database(getApplicationContext()); Cursor c = db.getTaskCount(id); System.out.println(c.getCount()); if(c.getCount()>0) { System.out.println(c); Intent taskListID = new Intent(getApplicationContext(), AddTask_List.class); task = adapter.getItem(position); int taskList_id = task.getTaskListId(); taskListID.putExtra("TaskList_ID", taskList_id); startActivity(taskListID); } else { Intent addTask = new Intent(getApplicationContext(), Add_Task.class); startActivity(addTask); } } }); db.close(); } 

mais quand je clique sur le nom de la liste des tâches, il retourne 1, le nombre de tâches du robot.

    En utilisant DatabaseUtils.queryNumEnsortinges() :

     public long getProfilesCount() { SQLiteDatabase db = this.getReadableDatabase(); long count = DatabaseUtils.queryNumEnsortinges(db, TABLE_NAME); db.close(); return count; } 

    ou ( plus inefficace )

     public int getProfilesCount() { Ssortingng countQuery = "SELECT * FROM " + TABLE_NAME; SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor = db.rawQuery(countQuery, null); int count = cursor.getCount(); cursor.close(); return count; } 

    En activité:

     int profile_counts = db.getProfilesCount(); db.close(); 

    Utilisez android.database.DatabaseUtils pour obtenir le nombre de comptes.

     public long getTaskCount(long tasklist_Id) { return DatabaseUtils.queryNumEnsortinges(readableDatabase, TABLE_NAME); } 

    C’est un utilitaire simple qui a plusieurs méthodes d’encapsulation pour effectuer des opérations de firebase database.

    c.getCount() renvoie 1 car le curseur contient une seule ligne (celle avec le vrai COUNT(*) ). Le nombre dont vous avez besoin est la valeur int de la première ligne du curseur.

     public int getTaskCount(long tasklist_Id) { SQLiteDatabase db = this.getReadableDatabase(); Cursor cursor= db.rawQuery( "SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?", new Ssortingng[] { Ssortingng.valueOf(tasklist_Id) } ); int count = 0; if(null != cursor) if(cursor.getCount() > 0){ cursor.moveToFirst(); count = cursor.getInt(0); } cursor.close(); } db.close(); return count; } 

    Je sais qu’il a été répondu il y a longtemps, mais je voudrais aussi partager ceci:

    Ce code fonctionne très bien:

     SQLiteDatabase db = this.getReadableDatabase(); long taskCount = DatabaseUtils.queryNumEnsortinges(db, TABLE_TODOTASK); 

    MAIS si je ne veux pas compter toutes les lignes et j’ai une condition à appliquer?

    DatabaseUtils a une autre fonction pour cela: DatabaseUtils.longForQuery

     long taskCount = DatabaseUtils.longForQuery(db, "SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?", new Ssortingng[] { Ssortingng.valueOf(tasklist_Id) }); 

    La documentation longForQuery dit:

    Méthode utilitaire pour exécuter la requête sur la firebase database et renvoyer la valeur dans la première colonne de la première ligne.

     public static long longForQuery(SQLiteDatabase db, Ssortingng query, Ssortingng[] selectionArgs) 

    Il est performant et vous permet d’économiser du temps et du code standard

    J’espère que cela aidera quelqu’un un jour 🙂

    Changez votre méthode getTaskCount à ceci:

     public int getTaskCount(long tasklist_id){ SQLiteDatabase db = this.getWritableDatabase(); Cursor cursor= db.rawQuery("SELECT COUNT (*) FROM " + TABLE_TODOTASK + " WHERE " + KEY_TASK_TASKLISTID + "=?", new Ssortingng[] { Ssortingng.valueOf(tasklist_id) }); cursor.moveToFirst(); int count= cursor.getInt(0); cursor.close(); return count; } 

    Ensuite, mettez à jour le gestionnaire de clic en conséquence:

     public void onItemClick(AdapterView< ?> arg0, android.view.View v, int position, long id) { db = new TodoTask_Database(getApplicationContext()); // Get task list id int tasklistid = adapter.getItem(position).getTaskListId(); if(db.getTaskCount(tasklistid) > 0) { System.out.println(c); Intent taskListID = new Intent(getApplicationContext(), AddTask_List.class); taskListID.putExtra("TaskList_ID", tasklistid); startActivity(taskListID); } else { Intent addTask = new Intent(getApplicationContext(), Add_Task.class); startActivity(addTask); } } 

    Afin d’interroger une table sur le nombre de lignes de cette table, vous souhaitez que votre requête soit aussi efficace que possible. Référence

    Utilisez quelque chose comme ceci:

     /** * Query the Number of Ensortinges in a Sqlite Table * */ public long QueryNumEnsortinges() { SQLiteDatabase db = this.getReadableDatabase(); return DatabaseUtils.queryNumEnsortinges(db, "table_name"); } 

    Voyez-vous ce que fait DatabaseUtils.queryNumEnsortinges () ? C’est affreux! Je l’utilise

     public int getRowNumberByArgs(Object... args) { Ssortingng where = comstackWhere(args); Ssortingng raw = Ssortingng.format("SELECT count(*) FROM %s WHERE %s;", TABLE_NAME, where); Cursor c = getWriteableDatabase().rawQuery(raw, null); try { return (c.moveToFirst()) ? c.getInt(0) : 0; } finally { c.close(); } } 

    Une fois que vous avez le curseur que vous pouvez faire

    Cursor.getCount ()

    Je suis un codeur paresseux, et je n’entre pas dans toutes ces méthodes supplémentaires, création de curseur, concaténation de chaînes, recherche de variables, etc., à moins que cela ne soit bénéfique.

    Si tout ce que je veux, c’est un compte rapide de lignes:

     if ((db.rawQuery("SELECT column FROM table", null).getCount()) > 0) { // Do stuff } 

    Je trouve les cordes plus faciles à lire! Ne vous méprenez pas, je fais du code de manière plus verbeuse lorsque cela est nécessaire, mais si je peux le faire une ligne, je le ferai!

    Cordialement,

    Jacko

    MODIFIER:

    Juste regardé la date, vous avez probablement sortingé ceci maintenant: /