Как получить количество строк в SQLite с помощью Android?
Я создаю диспетчер задач. У меня есть tasklist, и я хочу, когда я нажимаю на конкретное имя tasklist, если он пуст, то он продолжает добавлять действие задачи, но если у него есть 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();
}
но когда я нажимаю на имя tasklist, он возвращает 1, bot количество задач в него.
9 ответов
используя 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();
используйте android.база данных.DatabaseUtils, чтобы получить количество подсчета.
public long getTaskCount(long tasklist_Id) {
return DatabaseUtils.queryNumEntries(readableDatabase, TABLE_NAME);
}
Это простая утилита, которая имеет несколько методов обертки для достижения операции с базой данных.
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;
}
Я знаю, что ответ был дан давно, но я хотел бы поделиться этим также:
этот код прекрасно работает:
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
документация говорит:
Utility метод для запуска запроса на БД и возврата значения в первом столбце первого ряд.
public static long longForQuery(SQLiteDatabase db, String query, String[] selectionArgs)
это производительность дружественных и сохранить вам некоторые времени и шаблонный код
надеюсь, это поможет кому-нибудь когда-нибудь:)
чтобы запросить таблицу для количества строк в этой таблице, вы хотите, чтобы ваш запрос был максимально эффективным. ссылка.
использовать что-то вроде этого:
/**
* Query the Number of Entries in a Sqlite Table
* */
public long QueryNumEntries()
{
SQLiteDatabase db = this.getReadableDatabase();
return DatabaseUtils.queryNumEntries(db, "table_name");
}
измените метод 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);
}
}
вы видите, что 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();
}
}
Я ленивый кодер и не вдавайтесь во все эти дополнительные методы, создание курсора, конкатенацию строк, поиск переменных и т. д., Если это не принесет пользы.
Если все, что я хочу-это быстрый подсчет строк:
if ((db.rawQuery("SELECT column FROM table", null).getCount()) > 0) {
// Do stuff
}
Я нахожу простые строки легче читать! Не поймите меня неправильно, я делаю код более подробно, когда это требуется, но если я могу сделать это одну строку, я сделаю!
С уважением,
Яцко
изменить:
просто посмотрел на дата, которую вы, вероятно, уже отсортировали:/