Android SQlite onUpgrade

Android SQlite onUpgrade,android,sqlite,Android,Sqlite,我的Android数据库的onUpgrade函数出错。问题是我在一个版本中修改一个表以添加新列,然后在以后的更新函数中查询该表。如果更新是从旧版本开始的,那么当我试图从新表中的游标访问列时,它会出错。如果我单独运行更新,每次从一个版本更新,它就可以正常工作。我怎样才能解决这个问题 我得到的错误是java.lang.IllegalStateException:从第0行col-1获取字段槽失败 这就是我创建新表的方式 db.execSQL("CREATE TABLE assignment_setti

我的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();

但它仍然会出错。不过现在的区别是,新表随后会出现在数据库中。因此,我仍然有一个问题,由于某种原因,光标显示该列不存在。

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

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

请在问题中包括相关的SQLite帮助程序代码。代码很长,这就是为什么我没有包括它。如果一次只升级一个版本,它就可以正常工作,所以我知道我的代码可以正常工作。问题在于onUpgrade在完成更新之前不会发布更改。是的,
onUpgrade()
在事务内部运行,并且在您从
onUpgrade()返回之前,事务不会完成。这是一个可能的原因。但是一定要包括升级代码的相关部分,这样问题就变得具体和有答案了。我添加了代码段。我不是简单地修改表。最初创建此表时,我使用了很多错误的做法,现在我正在清理数据库。我必须创建一个临时表,将旧数据传输到它(像我一样修改它),删除以前的表,然后重命名它。是的,我确实更改了版本号。正如我上面所说的,如果我一次升级一个版本,它就可以正常工作。问题在于,升级是背靠背的。