Подтвердить что ты не робот

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

Я создаю диспетчер задач. У меня есть список задач, и я хочу, когда я нажимаю на конкретное имя списка задач, если оно пустое, тогда он продолжает действие Добавить задачу, но если у него есть 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, количество задач в него.

4b9b3361

Ответ 1

Используя DatabaseUtils.queryNumEntries():

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

или (более неэффективно)

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

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

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

Ответ 2

Используйте android.database.DatabaseUtils, чтобы получить номер счета.

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

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

Ответ 3

c.getCount() возвращает 1 потому что курсор содержит одну строку (ту, которая содержит реальный COUNT(*)). Количество, которое вам нужно, это значение int первой строки в курсоре.

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 = cursor.getInt(0);
        }
        cursor.close();
    }

    db.close();
    return count;
}   

Ответ 4

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

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

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)

Это дружелюбная производительность и сэкономит вам время и шаблонный код

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

Ответ 5

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

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

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

Ответ 6

Измените метод 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);
    }
}

Ответ 7

Вы видите, что делает DatabaseUtils.queryNumEntries()? Это ужасно! Я использую это.

public int getRowNumberByArgs(Object... args) {
    String where = compileWhere(args);
    String raw = String.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();
    }
}

Ответ 8

Как только вы получите курсор, вы можете сделать

Cursor.getCount()

Ответ 9

Ооочень просто, чтобы получить количество строк:

cursor = dbObj.rawQuery("select count(*) from TABLE where COLUMN_NAME = '1' ", null);
cursor.moveToFirst();
String count = cursor.getString(cursor.getColumnIndex(cursor.getColumnName(0)));

Ответ 10

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

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

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

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

Привет,

Джако

EDIT:

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