Исключено из исключения SQL SQLite Cursor вне пределов на счете SELECT (*) FROM table
Следующая функция дает мне исключение из пределов...
public void count(){
SQLiteDatabase db = table.getWritableDatabase();
String count = "SELECT count(*) FROM table";
Cursor mcursor = db.rawQuery(count, null);
int icount = mcursor.getInt(0);
System.out.println("NUMBER IN DB: " + icount);
}
Он предназначен для возврата количества строк в базе данных. Кто-нибудь знает, что случилось? я, возможно, неправильно выполняю эту задачу?
Ответы
Ответ 1
Вы пропустили
mcursor.moveToFirst();
public void count(){
SQLiteDatabase db = table.getWritableDatabase();
String count = "SELECT count(*) FROM table";
Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
System.out.println("NUMBER IN DB: " + icount);
}
Но вы должны использовать лучшие методы для этой задачи, например встроенные помощники DatabaseUtils
таких как
public long count() {
return DatabaseUtils.queryNumEntries(db,'tablename');
}
Возможно, вам будет полезно использовать DatabaseUtils.longForQuery()
, чтобы получить значение первого столбца, когда у вас есть запрос на общий счет. Это проще, и вам не нужна эта куча работы с курсором.
Ответ 2
нужно переместить курсор в первую (и только) строку
Cursor mcursor = db.rawQuery(count, null);
mcursor.moveToFirst();
int icount = mcursor.getInt(0);
Ответ 3
вы можете использовать это, если хотите получить число строк для определенного идентификатора или значения
public int numbersOfrows (int id) {
SQLiteDatabase db = this.getReadableDatabase();
int numbersOfrows = 0 ;
Cursor c = db.rawQuery("select count(*) from table_name where Column_name = 'yourValue'")
if (c.moveToFirst()){
numbersOfrows = c.getInt(0);
}
return numbersOfrows ;
}