在数据库中进行一些更改后,Android应用程序崩溃了

时间:2012-11-05 14:23:30

标签: android

我开发了一个由数据库组成的Android应用程序。当我在移动设备上安装它时,它第一次工作正常。当我在数据库中进行一些更改并再次安装而不卸载以前安装的版本时,它会崩溃。

注意:我不想卸载以前的版本,因为我想保留以前存储的数据

有什么建议朋友吗?

3 个答案:

答案 0 :(得分:3)

更改数据库结构时,将数据库版本号增加1。 (即添加新列,删除现有列,更改列的数据类型,更改列名等...)。

并在db helper类的onUpgrade()方法中添加两行。

db.execSQL("DROP TABLE IF EXISTS your_table_name_goes_here");
onCreate(db);

每次检查数据库当前版本号。如果发现当前数据库版本与早期版本之间存在任何不匹配,则只需执行onUpgrade()方法即可升级数据库。因此,我们删除所有表格并再次创建一个新表格。 所以现在你可以添加/删除' n'使用db时的列数。您所要做的就是将版本号增加1并在更改数据库结构时执行。

答案 1 :(得分:2)

创建数据库时,如果使用这些结构,则可能会使用一个:

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,您可以在其中指明数据库的版本以避免出现问题。建议使用final static int变量来保存数据库的版本/编号,以便您可以轻松地更改它。 E.g:

public final static int dbVersion = 1;

然后,您应该覆盖onUpgrade(...)和/或onDowngrade(...),以便将更改应用于您当前的应用和数据。

最简单,最快捷的方法是提到一个@SANTHOSH,只需删除所有表并再次创建它们:

db.execSQL("DROP TABLE IF EXISTS your_table_name");
onCreate(db);

请注意,使用此解决方案您将丢失保存在数据库中的当前数据。您应该向onUpgradeonDowngrade添加更多逻辑,以便将数据从一个版本的数据库迁移到另一个版本(如果您想保留它)。

答案 2 :(得分:1)

如果您进行了更改,例如向其添加列,则需要执行完全卸载或升级数据库版本。

无论哪种方式,您都将丢失表中的所有数据,除非您首先通过创建临时数据库来存储数据来备份数据