如何从 sqlite 游标中获取列值?
Posted
技术标签:
【中文标题】如何从 sqlite 游标中获取列值?【英文标题】:How to get column value from sqlite cursor? 【发布时间】:2012-03-13 19:10:12 【问题描述】:我正在尝试从游标中获取列值,该列是在运行时通过查询内部的计算生成的,我得到了该列的空值,我能够获取所有其他存在的列的值在 SQLite 表中。
我在 SQLite 编辑器上执行相同的查询,它还显示结果集中生成的列的值。
为什么当我从游标中检索它时会给出空值?
【问题讨论】:
请提供您用于查询和检索列值的代码。 @Chandrapal Yadav:你确定吗,当你发起查询时,你包括那个列?千万不要错过! 试试看这个链接..使用查询方法..***.com/questions/10600670/… 【参考方案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
【讨论】:
本例中的光标是什么? 第二个例子应该是String id = cursor.getString(0);
【参考方案2】:
游标列名区分大小写,请确保与 db 或列别名中指定的大小写匹配
【讨论】:
【参考方案3】:如果您不知道选择查询中的列索引,请按照此操作,
为表的所有字段定义常量,以便轻松获取字段 名字你不需要验证它的拼写
创建名为“DBConstant.java”的数据库成本类并定义 表格字段
public static final String ID = "id";
然后从光标中获取值,
cursor.getString(cursor.getColumnIndex(DBConstant.ID));
cursor.getColumnIndex(字段名);它在您的选择语句中返回字段列索引 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!
【讨论】:
以上是关于如何从 sqlite 游标中获取列值?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Recycler View 的长按位置获取 SQLite 列值?
如何从表1中检索列数据并使用SQLite数据库将该列值插入到Android Studio的表2中?