如何更新SQLite数据库而不丢失所有现有数据?

JMR*_*ies 10 sqlite android

我正在为我的应用程序的SQLite DB添加一个表.我的所有语法都很好,而不是问题.但是我在创建新表时遇到了一些麻烦.我添加了新表....

@Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DATABASE_CREATE);
            db.execSQL(CREATE_REQUESTS);
            db.execSQL(CREATE_OVERRIDE);
        }
Run Code Online (Sandbox Code Playgroud)

我的创建方法.我有3张桌子.当我更新版本号时,我收到一条错误消息"已经创建了表请求(指的是CREATE_REQUESTS)." 看看我的onUpgrade方法......

@Override 
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            db.execSQL("DROP TABLE IF EXISTS contacts");
            onCreate(db);
        }
Run Code Online (Sandbox Code Playgroud)

让我理解,db.execSQL("DROP TABLE IF EXISTS contacts")在onCreate方法中引用我的DATABASE_CREATE表的行用于删除旧表,然后下一行onCreate(db);重新创建它.我没有向execSQL行添加请求,这是导致错误的原因.这是问题:我宁愿不丢失我已经拥有的两个表中的数据.有没有办法添加像我正在尝试做的表,而不是丢失所有旧数据?谢谢.

Ebo*_*ike 13

你可以做任何你想做的事onUpgrade.您可以使用ALTER向表中添加新列.

最糟糕的情况是,如果您的架构完全不同,则必须创建新表,使用旧表中的数据填充它,然后删除旧表.

无论如何,onUpgrade其设计旨在实现平滑升级而不会丢失任何数据.这取决于你正确实施它.

  • 它只在您递增数据库版本时调用. (4认同)