好的,这是我的数据库创建语句:
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被忽略/传递?
答案 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");
}