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

标签 android sqlite

我正在向我的应用程序的 SQLite 数据库中添加一个表。我所有的语法都很好,不是问题。但是我在正确创建新表时遇到了一些麻烦。我添加了新表....

@Override
        public void onCreate(SQLiteDatabase db) {
            db.execSQL(DATABASE_CREATE);
            db.execSQL(CREATE_REQUESTS);
            db.execSQL(CREATE_OVERRIDE);
        }

我的创建方法。我有 3 张 table 。当我更新版本号时,出现“表请求(指CREATE_REQUESTS)已经创建”的错误。看看我的 onUpgrade 方法...

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

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

最佳答案

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

最坏的情况是,如果您的模式完全不同,您将不得不创建新表,使用旧表中的数据填充它,然后删除旧表。

在任何情况下,onUpgrade 旨在允许顺利升级而不会丢失任何数据。正确实现它完全取决于您。

关于android - 如何更新 SQLite 数据库而不丢失所有现有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188839/

相关文章:

java - android sqlite数据库表重建

android - 将字段添加到现有的 sqlite 数据库

Android 的 SimpleCursorAdapter 使用 DISTINCT 进行查询

c# - 尝试在 C# 中查询 SQLite3 数据库时出错

java - 如何在android中使用Canvas在线尖上画一个圆

java - Adapter.getView 从未被称为 Android Studio

java - 当我尝试在 fragment 生命周期中实例化新类时出错

android - Gradle错误: Build failed with an exception,配置项目 ':Demo'时出现问题

android - 如何在 Chrome OS 上启用 ADB 调试?

android - 使用 sqlite ORDERBY 字段