Как получить значение столбца из курсора sqlite?
Я пытаюсь получить значение столбца из курсора, этот столбец генерируется во время выполнения вычислениями внутри запроса, я получаю нулевое значение этого столбца, я могу получить значение всех других столбцов, которые существуют в таблице SQLite.
Я выполняю тот же запрос в редакторе SQLite, он также показывает значение сгенерированного столбца в наборе результатов.
Почему это дает нулевое значение, когда я извлекаю его из курсора?
Ответы
Ответ 1
Очень просто вы можете получить его одним из следующих способов:
String id = cursor.getString( cursor.getColumnIndex("id") ); // id is column name in db
или
String id = cursor.getString( cursor.getColumnIndex(0)); // id is first column in db
Ответ 2
Имена столбцов курсора чувствительны к регистру, убедитесь, что вы соответствовали случаю, указанному в имени псевдонима db или столбца
Ответ 3
-
Если вы не знаете индекс столбца в выбранном запросе, выполните следующие действия:
Определите константу для всех полей таблицы, так что легко получить поле
имя вам не нужно проверять его заклинание
создать класс Database Costant с именем "DBConstant.java" и определить
табличные поля
public static final String ID = "id";
Затем получите значение из курсора,
cursor.getString(cursor.getColumnIndex(DBConstant.ID));
cursor.getColumnIndex(имя поля); он возвращает индекс столбца поля в выписке select
cursor.getString(индекс столбца). он возвращает значение, которое находится в этом столбце
-
Если вы знаете индекс столбца в выбранном запросе,
cursor.getString(0);
Ответ 4
Если вы хотите получить строковое значение
String id = cursor.getString( cursor.getColumnIndex("name") ); // id is column name in db
or
String id = cursor.getString( cursor.getColumnIndex(0));
Если вы хотите получить целочисленное значение
String id = cursor.getInt( cursor.getColumnIndex("id") ); // id is column name in db
or
String id = cursor.getInt( cursor.getColumnIndex(0));
Ответ 5
В Android Studio 3.4.1 (я использую Kotlin, но здесь это не имеет никакого значения) я обнаружил очень странное поведение.
Например:
Cursor c = db.rawQuery("Select IDH, ID, NOME, CONTEUDO from CalcHome
Inner Join Calcs using(id)", null)
Имена столбцов регистрировались жестко, независимо от регистра имен полей в Select. Компонент массива c.columnNames[0]
является Idh
не IDH
Так
int a = c.getInt(c.getColumnIndex("IDH")) // gives a runtime error.
Но
int a = c.getInt(c.getColumnIndex("Idh")) // works!