我开发了一个由数据库组成的 android 应用程序。当我将它安装在移动设备上时,它第一次运行良好。当我对数据库进行一些更改并再次安装它而不卸载以前安装的版本时,它会崩溃。
注意:我不想卸载以前的版本,因为我想保留以前存储的数据
有什么建议的朋友吗?
我开发了一个由数据库组成的 android 应用程序。当我将它安装在移动设备上时,它第一次运行良好。当我对数据库进行一些更改并再次安装它而不卸载以前安装的版本时,它会崩溃。
注意:我不想卸载以前的版本,因为我想保留以前存储的数据
有什么建议的朋友吗?
更改数据库结构时将数据库版本号增加 1。(即添加新列、删除现有列、更改列的数据类型、更改列名等...)。
并在您的数据库助手类的 onUpgrade() 方法中放入两行以下。
db.execSQL("DROP TABLE IF EXISTS your_table_name_goes_here");
onCreate(db);
每次它检查数据库当前版本号。如果发现当前数据库版本与早期版本不匹配,则只需执行 onUpgrade() 方法来升级数据库。因此,我们删除所有表并再次创建一个新表。因此,现在您可以在使用 db 时添加/删除“n”个列。您所要做的就是将版本号增加 1 并在您更改数据库结构时执行。
当您创建数据库时,您可能会使用以下构造函数:
public TimePointsSQLiteHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, dbName, factory, dbVersion);
}
private TimePointsSQLiteHelper(Context context) {
super(context, dbName, null, dbVersion);
}
如您所见,有一个变量dbVersion
,这是您指示数据库版本以避免您遇到的问题的变量。作为建议,使用最终的静态 int 变量来旧数据库的版本/编号,以便您可以轻松更改它。例如:
public final static int dbVersion = 1;
然后您应该覆盖onUpgrade(...)
和/或onDowngrade(...)
以便将更改应用到您当前的应用程序和数据。
最简单和最快的方法是提到的@SANTHOSH,只需删除所有表并再次创建它们:
db.execSQL("DROP TABLE IF EXISTS your_table_name");
onCreate(db);
请注意,使用此解决方案,您将丢失保存在数据库中的当前数据。如果您想保留它,您应该添加更多逻辑onUpgrade
并将数据从一个版本的数据库迁移到另一个版本。onDowngrade
如果您进行了更改,例如向其中添加列,则需要完全卸载或升级数据库版本。
无论哪种方式,您都将丢失表中的所有数据,除非您首先通过创建一个临时数据库来备份数据以将其存储在