SQLite in Android zu bekommen RowID
Ich bin erstellen einer app zum aufzeichnen von Zuweisungen für die verschiedenen Klassen. Jede Klasse hat seine eigene einzigartige ID, so werden die Aufgaben aufgeführt, die für jede Klasse nicht überschneiden, in anderen Klassen. Hier ist eine Methode, die ich auf die rowid für eine bestimmte Klasse.
public int getIdFromClassName(String className){
String query = "SELECT rowid FROM " + CLASSES_TABLE_NAME + " WHERE " + CLASSES_COLUMN_NAME + " = '" + className + "'";
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery(query, null);
return res.getColumnIndex("id");
}
Jedoch, dies immer gibt den Wert -1 zurück.
Irgendwelche Gedanken auf, was zu ändern zurück die richtige rowid-Wert?
EDIT:
@Override
public void onCreate(SQLiteDatabase db) {
//TODO Auto-generated method stub
db.execSQL(
"create table " + CLASSES_TABLE_NAME + " " +
"(id integer primary key, " + CLASSES_COLUMN_NAME + " text)"
);
db.execSQL(
"create table " + ASSIGNMENTS_TABLE_NAME + " " +
"(id integer primary key, " + ASSIGNMENTS_COLUMN_NAME + " text, " + ASSIGNMENTS_COLUMN_TOTAL_POINTS
+ " INTEGER, " + ASSIGNMENTS_COLUMN_CLASS_ID + " INTEGER)");
}
haben Sie versucht das? return res.getString( res.getColumnIndex("id") );
Das würde einen String zurückgeben, aber ich bin auf der Suche nach der id in der form eines int
es hängt davon ab...die Daten geben, die Sie für den id...ich glaube, Sie können auch getInt ..wenn Ihr Datentyp integer
wenn Sie noch nicht gelöst..können Sie überprüfen, res.moveToFirst () - Methode
wenn Sie nicht wissen, welche Spalten Ihre
Das würde einen String zurückgeben, aber ich bin auf der Suche nach der id in der form eines int
es hängt davon ab...die Daten geben, die Sie für den id...ich glaube, Sie können auch getInt ..wenn Ihr Datentyp integer
wenn Sie noch nicht gelöst..können Sie überprüfen, res.moveToFirst () - Methode
wenn Sie nicht wissen, welche Spalten Ihre
Cursor
hält call DatabaseUtils.dumpCursor
InformationsquelleAutor Kinoscorpia | 2016-01-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Spalte von der Abfrage zurückgegebenen heißt
rowid
, so werden Sie nicht finden, eine Spalte namensid
.Sicherzustellen, dass Sie die gleichen Spaltennamen in der Abfrage und im Aufruf
getColumnIndex
.Und den index dieser Spalte ist immer null; Sie müssen auch gelesen der tatsächliche Wert aus der Spalte:
Aber, Android hat ein Helfer-Funktion, dass macht es viel leichter zu Lesen, ein einzelner Wert:
InformationsquelleAutor CL.
Versuchen Sie diese Abfrage unter zum erstellen einer neuen Spalte name
rowID
:Und nach dieser Abfrage können Sie Holen Sie sich das echte
rowid
von derrowID
Spalte :InformationsquelleAutor Febin Mathew
res.getColumnIndex("id") geht, um Ihnen die Spalte index der Spalte mit dem Namen "id". und da sind Sie immer -1, kann es nicht finden.. sind Sie sicher, dass Ihre id-Spalte ist nicht "_id"?
Zu bekommen dies funktioniert, sollten Sie so etwas tun..
Cursor.getColumnIndex()
Cursor.getLong()
(Ich würde empfehlen, dass Sie verwenden, getLong() statt der Methode getInt (), weil die SQLite-Datenbank-ID ' s bekommen kann, die größer als int ist).
Was ist der name deiner ID Spalte? Es wird -1 zurückgeben, wenn Sie nicht finden können, "id" oder "_id". EDIT: die Beurteilung durch die SQL, die Namen Ihrer Spalte "rowid" korrekt? so versuchen, res.getLong(res.getColumnIndex("rowid"));
Hinzugefügt wurde die onCreate-Methode
Sie müssen überprüfen Sie Ihre SQL-Anweisung.. es sollte "SELECT id FROM" + CLASSES_TABLE_NAME + "WHERE" + CLASSES_COLUMN_NAME + " = '" + className + "'";
InformationsquelleAutor hitch.united
Können Sie versuchen, diese:
InformationsquelleAutor kulvinder
Überprüfen Sie Ihren Cursor, wenn seine null-check dein Log, dass Ihre Tabelle erfolgreich erstellt, und wenn Ihr nicht auf null stellen Sie sicher, dass Ihre Tabelle hat Spalte
id
.InformationsquelleAutor Chintan Bawa