So testen Sie, ob der Cursor in einer SQLiteDatabase-Abfrage leer ist
Ich habe eine SQL Tabelle, die erstellt wird, indem Sie den folgenden code:
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID
+ " INTEGER PRIMARY KEY AUTOINCREMENT, " + SUBJECT
+ " TEXT NOT NULL," + TOPIC + " TEXT NOT NULL, "
+ LECTURENUMBER + " TEXT NOT NULL, " + PAGENUMBER
+ " TEXT NOT NULL, " + DATE + " TEXT NOT NULL, " + _DATA
+ " TEXT NOT NULL);");
}
Ich die Abfrage der Tabelle wie folgt:
String sql = "SELECT " + _ID + "," + SUBJECT + " FROM " + TABLE_NAME
+ " GROUP BY " + SUBJECT + ";";
Cursor cursor = subjects.getReadableDatabase().rawQuery(sql, null);
Das problem ist, ich habe zum starten Eine Aktivität, wenn Sie den cursor leer ist(d.h. die Tabelle speichert keine Werte) und der Aktivität B, wenn der cursor nicht leer ist(d.h. eine Tabelle gefüllt ist).
Ich bin nicht in der Lage, eine Methode zu finden, die mir sagen kann, ob die Tabelle leer ist oder nicht.
Ich Habe versucht, die Verwendung der Log wie folgt:
private void showSubjectsOnList() {
String sql = "SELECT " + _ID + "," + SUBJECT + " FROM " + TABLE_NAME
+ " GROUP BY " + SUBJECT + ";";
Cursor cursor = subjects.getReadableDatabase().rawQuery(sql, null);
Log.d("Events",Integer.toString(cursor.getCount()));
if(cursor.isNull(0)!=false){
cursor.close();
subjects.close();
startActivity(new Intent(this,OpenScreen.class));
}
}
Aber das LOG zeigt 1, wenn die Tabelle leer ist...und wieder 1, wenn Tabelle enthält 1 Eintrag....es zeigt 2, wenn die Tabelle hat zwei Einträge, und so weiter.
Können Sie schlagen einige Verfahren zur Lösung von meinem problem, starten verschiedene Aktivitäten, basierend auf cursor leer ist oder nicht.
InformationsquelleAutor der Frage Waneya Iqbal | 2011-08-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was testen Sie den cursor so, und dann tun, was Sie gesagt haben:
Gibt die Anzahl der Zeilen im cursor
http://developer.android.com/reference/android/database/Cursor.html#getCount()
InformationsquelleAutor der Antwort Nikola Despotoski
Die einfachste und sauberste Möglichkeit zum testen für einen leeren cursor ist der folgende code:
Pro die docs, die Methode gibt false zurück, wenn der cursor leer ist:
http://developer.android.com/reference/android/database/Cursor.html#moveToFirst%28%29
InformationsquelleAutor der Antwort SBerg413
Gelöschte Datensätze bleiben in SQLite als null-Datensätze, aber
getCount()
zählt nur die nicht-null-Datensätze. Wenn Ihre Tabelle hat einige Datensätze, die null sind, einige nicht-null-Einträge haben_Id
zahlen grösser als ErgebnisgetCount()
. Um Sie zu erreichen, können Sie Durchlaufen cursor ( mittels for () - Schleife ) die doppelte Anzahl von Zeiten als Ergebnis dergetCount()
und verwenden Sie den cursor zu füllen record_Id zahlen in ein array. Lässt sagen resultierende array ist{ 1, 2, 5, 6, 7, 8, 9, 11, 12, 14 }
.Das bedeutet, dass die Datensätze 3, 4, 10, 13, null-Datensätze und die Tabelle 14 aufzeichnen, alle zusammen, nicht 10, die Sie
getCount()
.Denken Sie daran:
getCount()
gibt die Anzahl der nicht-null-Datensätze ,_Id
Anzahl von nicht-null-Datensätze,_Id
zahlen "verpasst" durch die cursor sind_Id
zahlen von null records,getCount()
alle zu bekommen.InformationsquelleAutor der Antwort Stan
Brauchen Sie nur zu verwenden, getCount().
Wenn Ihre sql ist korrekt, aber nicht wieder jede Zeile, die Sie haben eine NICHT null-cursor-Objekt, aber ohne Zeilen und getCount() 0 zurück.
InformationsquelleAutor der Antwort Minolan
Mein Vorschlag wäre mit einer
ListActivity
.Diese sind Aktivität, die gemeint sind, um Elemente anzuzeigen, die in einem
ListView
. Sie können einfach mit einemSimpleCursorAdapter
zum Auffüllen (auch abgebildet in derListActivity
s JavaDoc-Seite).Bieten Sie auch eine
setEmptyView()
-Methodedie verwendet werden kann, zur Anzeige einerView
(vielleicht einTextView
), die den Benutzer darüber informiert, dass es keine Aufzeichnungen noch und wie kann er schaffen.Ein Beispiel, wie vorgegangen werden kann, finden hier.
InformationsquelleAutor der Antwort Lukas Knuth
Ich glaube, dein problem ist, du bist nicht die Schaffung einer richtigen Abfrage.
Sollten Sie die SQLiteDatabase query.
Können Sie dann mit c.getCount (), um zu bestimmen, wenn die Tabelle nichts.
InformationsquelleAutor der Antwort AndroidDebaser