当用户从App Store更新应用程序时,Web sql数据库会被删除

时间:2017-07-10 13:23:44

标签: cordova web-sql

我有一个使用web sql数据库的cordova应用程序。在发布此版本之前,我已更新了一个表以包含在新列中。当用户更新APP时,先前的数据被删除。如果用户安装了新副本,则可以使用,并且在更新用户时无法找到任何以前的数据。

我甚至无法改变桌子,因为我不知道用户是否已经有桌子。目前我正在使用' CREATE TABLE IF NOT NOT EXISTS'创建一个表。

var myDB = openDatabase(' test',1.0,' Native APP',5 * 1024 * 1024);

我尝试将数据库的版本从1.0更改为2.0,但无济于事。需要一些帮助!

2 个答案:

答案 0 :(得分:1)

我很惊讶地看不到这个问题的答案。所以我发现了一些东西以下是你如何做到的,

var db = openDatabase("example_db", "", "Example Database", 100000);

if(db.version == ""){
  db.changeVersion("", "1", function(t){
    t.executeSql("create table foo...");
  }, null /* error callback */, function(){
    // success callback
    db.changeVersion("1", "2", function(t){
      t.executeSql("alter table foo...");
    });    
  });
}

if(db.version == "1"){
  db.changeVersion("1", "2", function(t){
    t.executeSql("alter table foo...");
  });
}

这对我有用!

答案 1 :(得分:0)

摘自文档:W3.org Web SQL Database。 由于changeVersion是异步方法,因此

这些方法必须立即返回,然后异步运行 事务步骤,其中事务回调是第一个 论点

,必须仔细评估检查的顺序。

/* the version is used only if the callbackfunction is not passed. In this case we pass it and therefore we have to create it with changeversion */
var db = openDatabase('documents', '1.0', 'Offline document storage', 5*1024*1024, 
  function (db) {//Enter only the creation of the database, the first time
    db.changeVersion('', '1.0', function (t) {
      t.executeSql('CREATE TABLE docids (id, name)');
    }, error);
  }
);
/*To make changes to the database, it will be necessary to slowly add the functions thus written*/

if(db.version == "1.0") {
  db.changeVersion("1.0", "1.2", 
	function(trans) {
		//All functions from 1.0 to 1.2
		trans.executeSql('CREATE TABLE IF NOT EXISTS DEMO1 (id unique, data, foo)');
        trans.executeSql('CREATE TABLE IF NOT EXISTS DEMO2 (id unique, data, foo)');
        trans.executeSql('CREATE TABLE IF NOT EXISTS DEMO3 (id unique, data, foo)');
  });
}
else if(db.version == "1.1") {
    db.changeVersion("1.1", "1.2", 
	function(trans) {
		//Only functions from 1.1 to 1.2
        trans.executeSql('CREATE TABLE IF NOT EXISTS DEMO2 (id unique, data, foo)');
        trans.executeSql('CREATE TABLE IF NOT EXISTS DEMO3 (id unique, data, foo)');
  });
}