【问题标题】:Android SQLite - new database with another app versionAndroid SQLite - 带有另一个应用程序版本的新数据库
【发布时间】:2018-12-10 06:11:19
【问题描述】:

我有一个应用程序,我在其中使用我提供的 SQLite 数据库,所以它是固定的,用户不会更新数据库中的任何内容。只会显示来自该数据库的结果。

问题是 - 我仅在应用程序首次运行时以编程方式创建该数据库:

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);

    if(!prefs.getBoolean("firstTime", false)) {
        final DatabaseHelper myDb;
        myDb = new DatabaseHelper(this);
        myDb.deltab();
        myDb.insertData("Josh","Smith","012345678","something","something","something");myDb.insertData("Josh","Smith","012345678","something","something","something"); }

    SharedPreferences.Editor editor = prefs.edit();
    editor.putBoolean("firstTime",true);
    editor.apply();

首先我删除表(只是为了确保它会从头开始创建它),然后我创建它并插入数据。

这在第一次运行应用时运行良好。

但如果我以后需要在该表中添加更多数据,或者在下一个应用版本中更改任何现有数据,我该怎么做?

如果用户下载了新版本的应用程序,firstTime 条件不会运行,因为他之前已经启动了旧应用程序并且通过升级版本不会重置共享首选项。

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    看起来您已经在使用SQLiteOpenHelper 来管理您的数据库(猜测DatabaseHelper)。这让事情变得更容易。您可以使用它来支持您的需求。

    • 由于不必要而丢失SharedPreferences 首次运行检查。只需在您的助手onCreate() 中设置您的数据库。如果设备中不存在数据库文件,即“首次运行”,它将运行一次。

    • 要从旧版本更新到新版本,请将您提供给SQLiteOpenHelper 构造函数的数据库版本升级并在onUpgrade() 中更改数据。如果存在具有旧版本号的数据库文件,它将运行。

    【讨论】:

    • 所以如果我只使用最终的 DatabaseHelper myDb;myDb = new DatabaseHelper(this);它会在第一次运行时从 DatabaseHelper 自动运行 onCreate() 吗?对于新的应用版本,我应该在哪里调用 onUpgrade?另外,我最好删除旧的 dtb 并创建一个新的,而不是在表中写入每个更改,可以有更多更改,在我的情况下重新创建整个 dtb 更容易。实际上,我的问题是,我在哪里将新旧版本参数放在 onUpgrade 中,以便在应用更新时只运行一次。
    • 谢谢。如果我更改我的 DatabaseHelper 代码中的版本号,我是否正确 - public DatabaseHelper(Context context) {super(context, DATABASE_NAME, null, 1); }, onUpgrade 会自动调用吗?如果是这样,那么我可以在那里放置 DROP 表并 onCreate new,我的问题就解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 2016-04-19
    • 2011-03-26
    • 1970-01-01
    相关资源
    最近更新 更多