即使列存在,SQLite Cursor getColumnIndex()也会返回-16

时间:2013-10-02 18:39:51

标签: java android sqlite

我在SQLite数据库中为我的应用程序存储了许多对象。这些对象的类有一个构造函数,它接受从Database类传入的Cursor对象。例如:

public MyClass(Cursor cursor) {
    this.id = cursor.getString(cursor.getColumnIndex(MyDatabase.KEY_ROWID));
    this.nickname = cursor.getString(cursor.getColumnIndex(MyDatabase.KEY_NICKNAME));

......等等。

但是我注意到,当ID列的getColumnIndex返回-16时,我一直在崩溃。 (如果我注释掉那一行,无论我试图访问的第一列是什么,它也会返回-16)。我已经添加了一些额外的日志记录,但它没有帮助,因为看起来列很好:

public MyClass(Cursor cursor) {     
    Log.i("TEST", Column names are: " + Arrays.toString(cursor.getColumnNames()));
    Log.i("TEST", Making object, id column index is " + cursor.getColumnIndex(MyDatabase.KEY_ROWID));

打印哪些:

Column names are: [_id, nickname...]
Making object, id column index is -16

所以它看起来一切都应该没问题,任何人都知道为什么一切都会在从光标读取时变得如此混乱?

编辑:这是我如何获取光标,这是数据库类中的一个方法:

public MyObject getMyObject(String id) {
    MyObject objectFound = null;
    String[] whereArgs = { id };
    Cursor cursor = db.query(true, getTableName(), null, WHERE_EQUALS, whereArgs, null, null, null, null);
    if(cursor.moveToFirst()) {
        //Should only return 1 entry from DB
        while(cursor.isAfterLast() == false) {
            objectFound = new MyObject(cursor);
            cursor.moveToNext();
        }
    }

    cursor.close();     
    return objectFound;     
}

0 个答案:

没有答案