Intereting Posts
Использование `onPrepareOptionsMenu ()` на Android 3.0+ Как я могу вернуть значение из функции onResponse of Volley? Как защитить медиаконтент (видео, аудио) на Android от сохранения / перераспределения? Каков правильный способ проверки доступных токенов OAuth на сервере node.js? Цель ACTION_VIEW для файла с неизвестным MimeType Не удается заставить новые AppLinks работать на iOS или Android Как установить параметры Интернета для эмулятора Android? Множественное определение игнорируется для нулевого количества Как я могу получить вектор магнитного поля, независимо от вращения устройства? Медленная загрузка SDK через Android SDK manager Преимущества компиляции кода C с интерфейсом gcc gcc на C ++ Запустить скрипт как root через ADB Хорошая практика создает анонимную AsyncTask для параллельного небольшого известного процесса замораживания? Java-примитивные типы: int vs. Integer Как применить пользовательский образ к флажку в android

Как получить количество строк в sqlite с помощью Android?

Я создаю диспетчер задач. У меня есть tasklist, и я хочу, когда я нажимаю на конкретное имя списка задач, если он пуст, тогда он переходит в действие Add Task, но если у него есть 2 или 3 задачи, то он показывает мне эти задачи в нем в виде списка.

Я пытаюсь получить счет в списке. Мой запрос к базе данных выглядит следующим образом:

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

В моей деятельности:

 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(); } 

Но когда я нажимаю на имя списка задач, он возвращает 1, количество ботов в нем. Пожалуйста, предложите. благодаря

Solutions Collecting From Web of "Как получить количество строк в sqlite с помощью Android?"

В базе данных:

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

ИЛИ

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

В работе:

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

Используйте базу данных android.database.DatabaseUtils, чтобы получить количество счетчиков.

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

Это простая утилита, которая имеет несколько методов-оболочек для выполнения операций с базой данных.

C.getCount () возвращает 1, потому что курсор содержит одну строку (ту, у которой есть реальное число). Счет, который вам нужен, – это значение int первой строки в курсоре.

Вместо System.out.println (c.getCount ()); Попробуйте System.out.println (c.getInt (0));

редактировать

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

Измените метод getTaskCount следующим образом:

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

Затем обновите обработчик кликов следующим образом:

 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); } } 

Чтобы запросить таблицу для количества строк в этой таблице, вы хотите, чтобы ваш запрос был как можно более эффективным. Ссылка .

Используйте что-то вроде этого:

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

Я знаю, что он был дан ответ давно, но я хотел бы поделиться этим также:

Этот код работает очень хорошо:

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

НО что, если я не хочу считать все строки, и у меня есть условие для применения?

У DatabaseUtils есть еще одна функция для этого: DatabaseUtils.longForQuery

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

Документация longForQuery гласит:

Утилита для запуска запроса в db и возврата значения в первом столбце первой строки.

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

Это удобство в работе и экономит ваше время и код шаблона

Надеюсь, это когда-нибудь поможет кому-нибудь 🙂

Я ленивый кодер и не вхожу во все эти дополнительные методы, создание курсора, конкатенацию строк, поиск переменных и т. Д., Если это не приносит пользы.

Если все, что я хочу, это быстрый подсчет строк:

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

Я считаю, что простые строки легче читать! Не поймите меня неправильно. Я делаю код более подробным образом, когда это требуется, но если я смогу сделать это в одной строке, я буду!

С Уважением,

Джеко

РЕДАКТИРОВАТЬ:

Просто посмотрел на дату, вы, вероятно, отсортировали это сейчас: /