web-dev-qa-db-fra.com

Comment obtenir la valeur d'une colonne à partir du curseur sqlite?

J'essaie d'obtenir la valeur d'une colonne à partir d'un curseur, cette colonne est générée au moment de l'exécution par des calculs à l'intérieur de la requête, j'obtiens une valeur nulle de cette colonne, je suis en mesure d'obtenir une valeur de toutes les autres colonnes qui existent dans la table SQLite .

J'exécute la même requête sur l'éditeur SQLite, il montre également la valeur de la colonne générée dans le jeu de résultats.

Pourquoi cette valeur nulle lorsque je la récupère du curseur?

18
Chandrapal Yadav

Très simple, vous pouvez l'obtenir de l'une des manières suivantes

String id = cursor.getString( cursor.getColumnIndex("id") ); // id is column name in db

ou

String id = cursor.getString( cursor.getColumnIndex(0)); // id is first column in db
57
Lucifer

Les noms de colonne de curseur sont sensibles à la casse, assurez-vous de faire correspondre la casse spécifiée dans le nom d'alias de la base de données ou de la colonne

3
Rafael Nobre
  1. Si vous ne connaissez pas l'index de colonne dans la requête de sélection, suivez ceci,

    Définissez une constante pour tous les champs de la table afin qu'il soit facile d'obtenir le nom du champ, vous n'avez pas besoin de vérifier son sort

    créer la classe Database Costant avec le nom "DBConstant.Java" et définir les champs de table

    public static final String ID = "id";

    Ensuite, obtenez la valeur du curseur,

    cursor.getString (cursor.getColumnIndex (DBConstant.ID));

    cursor.getColumnIndex (nom du champ); il renvoie l'index de colonne de champ dans vous sélectionnez l'instruction cursor.getString (index de colonne). il renvoie la valeur qui se trouve sur cette colonne

  2. Si vous connaissez l'index des colonnes dans votre requête de sélection,

    cursor.getString (0);

2
Krunal Shah

Si vous voulez obtenir la valeur de la chaîne

String id = cursor.getString( cursor.getColumnIndex("name") ); // id is column name in db
or

String id = cursor.getString( cursor.getColumnIndex(0)); 

Si vous voulez obtenir une valeur entière

String id = cursor.getInt( cursor.getColumnIndex("id") ); // id is column name in db
or

String id = cursor.getInt( cursor.getColumnIndex(0)); 
0
Hoque MD Zahidul

Dans Android Studio 3.4.1 (j'utilise Kotlin mais cela ne fait aucune différence ici), j'ai découvert un comportement très étrange.

Par exemple:

Cursor c = db.rawQuery("Select IDH, ID, NOME, CONTEUDO from CalcHome 
           Inner Join Calcs using(id)", null)

Les noms de colonne ont été enregistrés de manière rigide, indépendamment de la casse des noms de champ dans Select. Le composant du tableau c.columnNames[0] est Idh pas IDH

Donc

int a = c.getInt(c.getColumnIndex("IDH")) // gives a runtime error.

Mais

int a = c.getInt(c.getColumnIndex("Idh")) // works!
0
Paulo Buchsbaum