Je ne pense pas que le Curseur expose directement.
SQLiteDatabase.insert() retourne l'id de ligne de la ligne nouvellement insérée. Ou Android, la convention est qu'il y a une colonne nommée "_id" qui contient les principales autoincrement clé de la table. Donc cursor.getLong(cursor.getColumnIndex("_id")) serait de récupérer des ce.
3
J'ai eu ce même problème où l'index de colonne de la clé primaire a été signalé comme -1 (ce qui signifie qu'il n'est pas là). Le problème est que j'ai oublié d'inclure les _ID de colonne dans la première clause SELECT qui a créé le curseur. Une fois que j'ai fait en sorte qu'il a été inclus, la colonne a été accessible, comme pour tous les autres.
3
Concernant la dernière phrase de Nic Forte réponse de la commande suivante ne fonctionne pas pour moi. cursor.getColumnIndex("_id") était encore -1
cursor.getLong(cursor.getColumnIndex("_id"))
Peut-être il y a un autre problème dans ma configuration qui est à l'origine du problème?
Personnellement, j'ai prises pour le maintien de mon propre colonne d'id unique à chaque table, je vais créer; Une douleur, mais c'est autour de cette question.
Dans mon cas, j'ai "rowid" dans DataManager.FIELD_ID et c'est SQLite colonne d'identité (chaque table dans sqlite a ce type de colonne), donc je n'ai pas besoin de mon propre identifiant unique colonne dans les tableaux.
Tant que le TABLEAU n'est pas définie à l'aide de WITHOUT ROWID vous pouvez obtenir le ROWID (ou devrait-il être rowid voir ci-dessous pour le cas) si vous le spécifier les colonnes à récupérer.
Par exemple pour un tableau avec 3 colonnes définies (Noms, la Couleur et l'Âge) sans conventionnelle _id colonne. La suite rawQuery fonctionne et renvoie le ROWID :-
Remarque! que le nom de la colonne dans le curseur est en minuscule que par :-
Remarque! ROWID dans le SÉLECTIONNEZ SQL est le cas indépendant (par exemple, RoWiD).
À l'aide de
Cursor csr = db.rawQuery("SELECT * FROM "+ TABLE_NAME,null);
NE retour de la ROWID (de même pour la valeur null pour les colonnes lors de l'utilisation de la query méthode).
À l'aide de query (par opposition à rawQuery) fonctionne de la même manière, c'est que vous devez spécifier ROWID (note alternatives à ROWID ci-dessous) comme une colonne à être récupérées par exemple :-
Au lieu de ROWIDvous pouvez également utiliser _ROWID_ ou OID (cas indépendant) comme le nom de la colonne dans la requête de noter que le nom de la colonne dans la résultante curseur est rowid c'est à dire il est minuscule.
Je ne pense pas que le Curseur expose directement.
SQLiteDatabase.insert()
retourne l'id de ligne de la ligne nouvellement insérée. Ou Android, la convention est qu'il y a une colonne nommée"_id"
qui contient les principales autoincrement clé de la table. Donccursor.getLong(cursor.getColumnIndex("_id"))
serait de récupérer des ce.J'ai eu ce même problème où l'index de colonne de la clé primaire a été signalé comme -1 (ce qui signifie qu'il n'est pas là). Le problème est que j'ai oublié d'inclure les _ID de colonne dans la première clause SELECT qui a créé le curseur. Une fois que j'ai fait en sorte qu'il a été inclus, la colonne a été accessible, comme pour tous les autres.
Concernant la dernière phrase de Nic Forte réponse de la commande suivante ne fonctionne pas pour moi.
cursor.getColumnIndex("_id")
était encore -1Peut-être il y a un autre problème dans ma configuration qui est à l'origine du problème?
Personnellement, j'ai prises pour le maintien de mon propre colonne d'id unique à chaque table, je vais créer; Une douleur, mais c'est autour de cette question.
Dans mon cas, j'ai "rowid" dans DataManager.FIELD_ID et c'est SQLite colonne d'identité (chaque table dans sqlite a ce type de colonne), donc je n'ai pas besoin de mon propre identifiant unique colonne dans les tableaux.
puis
Tant que le TABLEAU n'est pas définie à l'aide de
WITHOUT ROWID
vous pouvez obtenir le ROWID (ou devrait-il être rowid voir ci-dessous pour le cas) si vous le spécifier les colonnes à récupérer.Par exemple pour un tableau avec 3 colonnes définies (Noms, la Couleur et l'Âge) sans conventionnelle _id colonne. La suite rawQuery fonctionne et renvoie le ROWID :-
Remarque! que le nom de la colonne dans le curseur est en minuscule que par :-
Remarque! ROWID dans le SÉLECTIONNEZ SQL est le cas indépendant (par exemple, RoWiD).
À l'aide de
NE retour de la ROWID (de même pour la valeur null pour les colonnes lors de l'utilisation de la
query
méthode).À l'aide de
query
(par opposition àrawQuery
) fonctionne de la même manière, c'est que vous devez spécifier ROWID (note alternatives à ROWID ci-dessous) comme une colonne à être récupérées par exemple :-Alternatives à ROWID
Au lieu de
ROWID
vous pouvez également utiliser_ROWID_
ouOID
(cas indépendant) comme le nom de la colonne dans la requête de noter que le nom de la colonne dans la résultante curseur est rowid c'est à dire il est minuscule.