2013-04-29 67 views
1

我实现了一个使用Sqlite数据库的Android应用程序。在升级应用程序中删除SQLite数据库

当我发布我的应用程序的新版本(不在playStore中)时,我将其上传到我的服务器上,因此,如果旧应用程序正在运行,调用Web服务,可以理解新版本可用。所以,下载并安装新版本。

当应用程序被覆盖安装,数据库没有下降,所以,如果我需要做我的数据库中的任何改变,我需要使用方法:

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

这是正常的,除非我需要做的我的数据库有很多变化。在这种情况下,代码变得不可读。所以我想删除数据库并创建一个新的数据库。

我该如何执行此任务?

编辑:怎么样使用context.deleteDatabase(DATABASE_NAME);

+0

您是否尝试删除数据库文件?你可以通过'_db.getPath()'得到路径。 – 2013-04-29 14:53:42

回答

7

对于扔掉的数据库(数据是如在云中可用数据的高速缓存副本)我一般都onUpgrade()就叫onCreate()onCreate()执行DROP TABLE IF EXISTS <tablename>在创建表之前。

例如:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    onCreate(db); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    db.execSQL("DROP TABLE IF EXISTS foo"); 
    db.execSQL("CREATE TABLE foo(bar INTEGER, baz TEXT"); 
} 
+0

但是我的表格尚未创建,我希望在重新创建新表格之前将其删除。 – GVillani82 2013-04-29 15:14:43

+0

这正是“DROP TABLE IF EXISTS”所做的。如果它存在,它将删除表,如果不存在,则不执行任何操作。编辑添加一个例子。 – laalto 2013-04-29 15:18:29

+0

onCreate()上的第二个execSQL方法中缺少右括号 – 2015-05-08 19:14:27

1

你可以想想这个

不断升级的一丝共享偏好使用的标志。当您下载新版本时,请将标志设置为true。在每次发射时检查标志。如果该标志为true,则重新创建数据库并将该标志设置为false。

我没有尝试类似的东西,但我认为它应该适用于你的情况。

,并删除数据库context.deleteDatabase(DATABASE_NAME);

+1

谢谢@Stine,但是当我谈到“删除数据库”时,我的意思是drop数据库。我怎样才能删除数据库? – GVillani82 2013-04-29 14:52:07

0

如果你只是想重新创建你的整个数据库,只是下降每个表中旧的。

+1

什么是新的数据库版本? – GVillani82 2013-04-29 15:13:58