Android:升级数据库版本并添加新表

Android:升级数据库版本并添加新表

我已经为我的应用程序创建了sqlite表,但现在我想在数据库中添加一个新表。

我更改了DB版本如下

private static final int DATABASE_VERSION = 2;

并添加字符串以创建表

private static final String DATABASE_CREATE_color = 
   "CREATE TABLE IF NOT EXISTS files(color text, incident_id text)";

onCreate并且onUpgrade,如下:

@Override    public void onCreate(SQLiteDatabase database) {
        database.execSQL(DATABASE_CREATE_incident);
        database.execSQL(DATABASE_CREATE_audio);
        database.execSQL(DATABASE_CREATE_video);
        database.execSQL(DATABASE_CREATE_image);

    }

    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //drop table and add new tables when version 2 released.
        db.execSQL(DATABASE_CREATE_color);

    }

但由于某种原因,没有创建新表。我究竟做错了什么?


偶然的你
浏览 857回答 3
3回答

蝴蝶不菲

1.关于onCreate()和onUpgrade()onCreate(..)每当应用程序刚刚安装时调用。&nbsp;onUpgrade每当升级和启动应用程序并且数据库版本不同时调用。2.增加db版本你需要一个像这样的构造函数:MyOpenHelper(Context&nbsp;context)&nbsp;{ &nbsp;&nbsp;&nbsp;super(context,&nbsp;"dbname",&nbsp;null,&nbsp;2);&nbsp;//&nbsp;2&nbsp;is&nbsp;the&nbsp;database&nbsp;version}重要提示:单独增加应用程序版本是不够的onUpgrade!3.不要忘记你的新用户!别忘了添加database.execSQL(DATABASE_CREATE_color);您的onCreate()方法或新安装的应用程序将缺少该表。4.如何处理多个数据库随时间的变化如果您有连续的应用程序升级,其中有几个已进行数据库升级,您需要确保检查oldVersion:onUpgrade(SQLiteDatabase&nbsp;db,&nbsp;int&nbsp;oldVersion,&nbsp;int&nbsp;newVersion)&nbsp;{ &nbsp;&nbsp;&nbsp;switch(oldVersion)&nbsp;{ &nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(DATABASE_CREATE_color); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;we&nbsp;want&nbsp;both&nbsp;updates,&nbsp;so&nbsp;no&nbsp;break&nbsp;statement&nbsp;here... &nbsp;&nbsp;&nbsp;case&nbsp;2: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(DATABASE_CREATE_someothertable);&nbsp; &nbsp;&nbsp;&nbsp;}}这样,当用户从版本1升级到版本3时,他们将获得两个更新。当用户从版本2升级到3时,他们只会获得版本3更新...毕竟,每次发布更新时,都不能指望100%的用户群升级。有时他们会跳过更新或12 :)5.在开发过程中保持您的版本号控制最后......打电话adb&nbsp;uninstall&nbsp;<yourpackagename>完全卸载应用程序。当你再次安装时,你可以保证在开发时onCreate不必将数据库版本增加到平流层......

慕桂英4014372

您的代码看起来正确。我的建议是数据库已经认为它已经升级了。如果在增加版本号后执行项目,但在添加execSQL调用之前,测试设备/模拟器上的数据库可能已经相信它在版本2中。验证这一点的一种快速方法是将版本号更改为3 - 如果在此之后升级,您知道这只是因为您的设备认为它已经升级。

拉风的咖菲猫

您可以使用SQLiteOpenHelper的onUpgrade方法。在onUpgrade方法中,您将oldVersion作为参数之一。在onUpgrade使用a&nbsp;switch和每个cases中使用版本号来跟踪当前版本的数据库。这是最好的,你从遍历oldVersion到newVersion,增加version在时间1,然后再升级一步数据库的一步。当数据库版本1的人在很长一段时间后将应用程序升级到使用数据库版本7的版本并且应用程序因某些不兼容的更改而开始崩溃时,这非常有用。然后,数据库中的更新将逐步完成,涵盖所有可能的情况,即合并为每个新版本完成的数据库更改,从而防止应用程序崩溃。例如:public&nbsp;void&nbsp;onUpgrade(SQLiteDatabase&nbsp;db,&nbsp;int&nbsp;oldVersion,&nbsp;int&nbsp;newVersion)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(oldVersion)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;"ALTER&nbsp;TABLE&nbsp;"&nbsp;+&nbsp;TABLE_SECRET&nbsp;+&nbsp;"&nbsp;ADD&nbsp;COLUMN&nbsp;"&nbsp;+&nbsp;"name_of_column_to_be_added"&nbsp;+&nbsp;"&nbsp;INTEGER"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(sql); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql&nbsp;=&nbsp;"SOME_QUERY"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;db.execSQL(sql); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android