我试图从游标中获取列值,此列是在运行时通过查询内部的计算生成的,我得到此列的空值,我能够获得存在的所有其他列的值在SQLite表中。
我在SQLite编辑器上执行相同的查询,它还显示结果集中生成的列的值。
为什么当我从游标中检索它时,它会给出null值?
答案 0 :(得分:57)
非常简单你可以通过以下任何一种方式获得它
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
答案 1 :(得分:3)
游标列名称区分大小写,请确保您匹配db或列别名中指定的大小写
答案 2 :(得分:2)
如果您不知道选择查询中的列索引,请按照此处
进行操作为表的所有字段定义常量,以便很容易获得字段 你不需要验证其咒语的名称
创建名为" DBConstant.java"的数据库Costant类。并定义 表格字段
public static final String ID =" id&#34 ;;
然后从游标中获取值
cursor.getString(cursor.getColumnIndex(DBConstant.ID));
cursor.getColumnIndex(字段名称);它在select语句中返回字段列索引 cursor.getString(列索引)。它返回该列上的值
如果您在选择查询中知道列索引,
cursor.getString(0);
答案 3 :(得分:0)
如果要获取字符串值
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));
答案 4 :(得分:0)
在 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!