【问题标题】:Updating prebuilt SQL database in Android Studio在 Android Studio 中更新预构建的 SQL 数据库
【发布时间】:2020-08-27 11:25:22
【问题描述】:

我有一个简单的 Android 应用程序,它只显示来自使用 DB Browser 构建的 SQL 数据库的数据。 当我在 DB Browser 中更改数据库的内容,然后将 db 文件复制/粘贴到我的 App 的资产文件夹中(覆盖以前版本的 db)时,App 中显示的数据不会改变...... 我尝试增加版本号,但没有奏效...有什么建议吗?

【问题讨论】:

  • dbbrowser 只是一个查看数据库文件的软件。学习一些 SQLite db 教程,这些教程将用于更新数据库代码。

标签: android sql


【解决方案1】:

欢迎来到 StackOverflow。似乎您需要迁移数据库(即修改数据库结构)。 我假设你使用过 SQLite 或 Room。

如果你使用 SQLite,那么使用

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 

用于迁移。参考this

如果您使用过 Room,请参考 this

编辑:

public class DbHelper extends SQLiteOpenHelper {
        private static DbHelper sDbHelper;

        private MyDbHelper(Context context) {
            super(context, *DATABASE_NAME*, null, *DATABASE_VERSION*);
        }

        public static DbHelper getInstance() {
            if (sDbHelper == null) {
                sDbHelper = new DbHelper(Axonator.getContext());
            }
            return sDbHelper;
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            MigrationV0ToV1 mV1 = new MigrationV0ToV1();
            mV1.run(db);
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            if (oldVersion < 1) {
                //means old version is 0, major change
                MigrationV0ToV1 migration = new MigrationV0ToV1();
                migration.run(db);
            }
        }

假设您的版本(DATABASE_VERSION) 为 0,那么您想修改数据库结构,然后将 DATABASE_VERSION 增加到 1。

public class MigrationV0ToV1 {
    
    public void run(SQLiteDatabase db) {
        //deleteTables(db);
        //createTables(db);
        //modifyTables(tb)
    }
}

【讨论】:

  • 感谢您的热烈欢迎 :) 我的 onUpgrade 有点奇怪,即当我增加版本号时它不运行...我会通读您的链接
  • 检查已编辑的答案。这是关于 sqlite 迁移的基本逻辑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2011-05-10
  • 2017-09-07
  • 2012-03-18
  • 2018-04-22
  • 1970-01-01
相关资源
最近更新 更多