android sqlite升级表SQLiteOpenHelper的onUpgrade方法重复调用的问题

来源:互联网 发布:算法导论 目录 编辑:程序博客网 时间:2024/05/17 07:06

我在onUpgrade方法中为以前的表增加字段,使用的如下的sql语句

db.execSQL("ALTER TABLE angle_info ADD type INTEGER DEFAULT 0");

但是onUpgrade方法一直会执行,打印传入参数,oldVersion是4,newVersion是6

每一次操作数据库,Log日志会打印,如下

01-20 15:13:15.097: E/SQLiteLog(13142): (1) duplicate column name: type

重复的字列名,说明sql已经执行成功了,但是版本号没有更改成功。

我们来看一下SQLiteOpenHelper源码250-264行(api19源码)

                try {                    if (version == 0) {                        onCreate(db);                    } else {                        if (version > mNewVersion) {                            onDowngrade(db, version, mNewVersion);                        } else {                            onUpgrade(db, version, mNewVersion);                        }                    }                    db.setVersion(mNewVersion);                    db.setTransactionSuccessful();                } finally {                    db.endTransaction();                }
最后发现造成这个问题的原因是,升级表的sql语句没有以分号结尾,产生了错误,抛出异常,使得
db.setVersion(mNewVersion);
没有执行,数据库版本号更新失败,所以会导致onUpgrade重复执行。


db.execSQL("ALTER TABLE angle_info ADD type INTEGER DEFAULT 0;//就是因为这个分号");

赶紧去检查你的sql吧。- =。





0 0