Android应用程序在数据库中进行某些更改时崩溃

Android应用程序在数据库中进行某些更改时崩溃,android,Android,我已经开发了一个android应用程序,它由数据库组成。当我在手机上安装它时,它第一次就可以正常工作了。当我在数据库中做一些更改并再次安装它而不卸载以前安装的版本时,它会崩溃 注意:我不想卸载以前的版本,因为我想保留以前存储的数据 朋友们,有什么建议吗?如果您进行了更改,如添加了列,则需要执行完全卸载或升级数据库版本 无论哪种方式,您都将丢失表中的所有数据,除非您首先备份数据,方法是创建临时数据库以将其存储在表中。更改数据库结构时,将数据库版本号增加1。(即添加新列、删除现有列、更改列的数据类型

我已经开发了一个android应用程序,它由数据库组成。当我在手机上安装它时,它第一次就可以正常工作了。当我在数据库中做一些更改并再次安装它而不卸载以前安装的版本时,它会崩溃

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


朋友们,有什么建议吗?

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


无论哪种方式,您都将丢失表中的所有数据,除非您首先备份数据,方法是创建临时数据库以将其存储在表中。

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

并在db helper类的onUpgrade()方法中放置以下两行

db.execSQL("DROP TABLE IF EXISTS your_table_name_goes_here");
onCreate(db);
每次检查数据库当前版本号时。若它发现当前数据库版本和早期版本之间存在任何不匹配,那个么它只需执行onUpgrade()方法来升级数据库。因此,我们删除所有表并再次创建一个新表。
因此,现在您可以在使用db时添加/删除“n”个列。您所要做的只是将版本号增加1,并在更改db结构时执行

当您创建数据库时,如果这些构造函数:

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变量来修改数据库的版本/编号,以便轻松地进行更改。 例如:

然后,您应该过度投递
onUpgrade(…)
和/或
onDowngrade(…)
,以便将更改应用到当前的应用程序和数据

最简单、最快的方法是@SANTHOSH提到的方法,只需删除所有表并重新创建它们:

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

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

我认为当您创建或更改ant列名时,所以卸载应用程序并安装新应用程序我不想丢失以前的数据。这样做会丢失以前存储的数据。不是吗?是的。您将丢失以前的数据。我不认为在开发应用程序时丢失以前的数据是一个大问题。实际上,我的应用程序已经准备好启动。启动后,如果我需要更改数据库,那么这是一个问题,那么您应该向onUpgrade函数添加更多逻辑,以将现有数据迁移到新数据库,这样您就不会丢失它。您能告诉我如何提高数据库版本吗?实际上我不是通过代码创建数据库。我只是连接到使用Sqlite浏览器创建的数据库。并使用db=this.openOrCreateDatabase(db\u NAME,MODE\u PRIVATE,null)在代码中进行连接;String selectQuery=“从”+表中选择计数(*);游标c=db.rawQuery(selectQuery,null);
db.execSQL("DROP TABLE IF EXISTS your_table_name");
onCreate(db);