2012-11-24 72 views
7

我有一个应用程序,它拥有一个包含3个表的sqlite。我担心的是,如果我引入一个添加另一个表的更新(所以这是4个表),那么更新后的版本将会清除数据库。更新后保留SQLite数据

如何备份/恢复数据库,因为备份发生在更新之前并且更新之后还原?如果我使用IO(复制到SD卡并复制),则它会失败。

我想可能是将数据导出到xml并手动加载。有另一种方法吗?任何关于如何做的例子?

回答

4

如果您只是想添加一个新表格,请在您的onUpgrade()方法中注释掉DROP TABLE命令。你有onUpgrade()代码的完全控制,因此它可以仅仅是:

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("CREATE TABLE ..."); 
} 

从技术上讲,你甚至都不需要增加的数据库版本,任何时候你有机会获得的db一个副本,你可以执行你的CREATE语句。

+0

哦该死!我怎么没有想到这一点!谢谢。但我的问题仍然存在,我该如何备份。可以说用户备份数据库,卸载应用程序,下载新的更新的应用程序,然后决定他要加载备份的文件。我怎样才能做到这一点?我不认为简单的IO复制会起作用 – Snake

+1

SQLite数据库只是一个常规文件,因此您可以将其复制到SD卡中,或者甚至可以将其复制到与现有数据库相同的文件夹中。 [这里是一个例子](http://stackoverflow.com/q/2170031/1267661)。 – Sam

+0

我想你错过了我的观点。可以说我有版本1的数据库有3个表。我将它复制到SD卡。用户升级到版本2的db有4个表。现在,如果你从SD复制数据库文件,那么你强制版本1,虽然代码将它视为版本2.看到问题,我想要一种方式能够导出和导入数据到相同的表,无论如果有没有额外的表格 – Snake