游标getString()或getInt()不返回给定索引处的值

时间:2017-08-20 23:36:36

标签: android sqlite

我为Android应用创建了一个SQLite数据库和表。可以插入值并返回long id而没有任何问题。当返回的id用于检索其他字段时,getColumnIndex(COLUMN_NAME)返回正确的索引,但是当使用getSting和getInt获取字段的值时,应用程序崩溃。 Android工作室没有任何错误。请帮忙。

数据库处理程序类:

switch-case

2 个答案:

答案 0 :(得分:1)

在查询游标的第一行之前,必须使用cursor.moveToFirst()。将您的if语句更改为:

   if (cursor != null && cursor.moveToFirst()) {

此外,即使没有结果,也必须关闭光标。我建议像这样写:

try {
   if (cursor != null && cursor.moveToFirst) {
            //for testing getInt
            int id = cursor.getInt(cursor.getColumnIndex(BABIES_BABY_ID));
            String name = cursor.getString(cursor.getColumnIndex(BABIES_NAME));
        }
}
finally {
    if(cursor != null) {
        cursor.close();
    }
}

这样无论发生什么异常,光标都会正确关闭。

答案 1 :(得分:0)

我认为你的光标不是数据。

mismatched types: expected struct `std::string::String`, found str  

例如:

Cursor cursor = db.query(TBL_BABIES,
            null, //This must not null. In here your columns in string array
            BABIES_BABY_ID + " = " + id,
            null, null, null, null);

在某些情况下,您需要在Cursor cursor = db.query(TBL_BABIES, new String[]{BABIES_BABY_ID, BABIES_NAME}, //What column you need BABIES_BABY_ID + " = " + id, null, null, null, null); 条件

中添加此命令
if