为什么我的getColumnIndex()返回-1?

时间:2011-06-26 17:34:45

标签: java android database sqlite cursor

好的,这是我的数据库创建语句:

create table entry (
 _id integer primary key autoincrement,
 date integer not null,
 checknum integer,
 payee text not null,
 amount integer not null,
 category text,
 memo text,
 tag text
);

创建数据库后,我拨打电话:

mChecknum = cursor.getColumnIndex("checknum");

mChecknum是-1。我已从设备中提取数据库并在其上使用了SQLite Browser,并且checknum字段就在那里。

阻止有问题的陈述:

mDbHelper.open();
Cursor cursor = mDbHelper.fetchAll();
startManagingCursor(cursor);
COL_DATE = cursor.getColumnIndex("date");
Log.v("Main:123", "COL_DATE: " + String.valueOf(COL_DATE) );
COL_CHECKNUM = cursor.getColumnIndex("checknum");
Log.v("Main:125", "COL_CHECKNUM: " + String.valueOf(COL_CHECKNUM) );
COL_PAYEE = cursor.getColumnIndex("payee");

COL_DATE返回1,COL_PAYEE返回2.为什么COL_CHECKNUM被忽略/传递?

2 个答案:

答案 0 :(得分:1)

在我的情况下,getColumnIndex在名称中包含“。”的列上返回错误。符号即:

int colIndex = cursor.getColumnIndex("Item No.");

尽管有“项目编号”栏目在光标内部(调试器Watch显示它)试图使列索引失败。

答案 1 :(得分:0)

在我的fetch / fetchAll数据库函数中,我忘了使用新列更新查询。

例如,在我添加新列之前,我的fetchAll代码如下所示:

public Cursor fetchAll() {
    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_DATE,
            KEY_PAYEE, KEY_AMOUNT, KEY_CATEGORY, KEY_MEMO, KEY_TAG}, 
            null, null, null, null, KEY_DATE + " desc");
}

将新列添加到数据库后,我的fetchAll函数如下所示:

public Cursor fetchAll() {
    return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_DATE, 
            KEY_CHECKNUM, KEY_PAYEE, KEY_AMOUNT, KEY_CATEGORY, KEY_MEMO, KEY_TAG}, 
            null, null, null, null, KEY_DATE + " desc");
}