SQlite onUpgrade

时间:2013-12-01 18:54:21

标签: android sqlite

我的Android数据库的onUpgrade功能出错了。问题是我在一个版本中更改了一个表来添加新列,并在稍后的更新函数中查询该表。如果更新从旧版本返回,当我尝试从新表中的光标访问列时,它会出错。如果我单独运行更新,一次从一个版本更新,它可以正常工作。我该如何解决这个问题?

我得到的错误是java.lang.IllegalStateException:从第0行col -1获取字段槽失败

这是我创建新表格的方式。

db.execSQL("CREATE TABLE assignment_settings_temp("+
                "id INTEGER PRIMARY KEY AUTOINCREMENT, "+
                "class_id INTEGER NOT NULL, "+
                "total_weight REAL)");

这是我的代码错误的地方。

obj.put("id", cursor.getInt(cursor.getColumnIndex("id")));

我尝试在创建表格后添加它

db.setTransactionSuccessful();
db.endTransaction();
db.beginTransaction();

但它仍然出错。现在的区别是新表在之后的数据库中。所以我仍然有问题,由于某种原因,光标说该列不存在。

1 个答案:

答案 0 :(得分:0)

您是否更改了数据库版本号。据我所知,如果你想调用onUpgrade方法,你必须改变数据库版本号并改变这样的表

db.execSQL("alter table " + TABLE_NAME + " add column sample_column text");