我有一个使用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,但无济于事。需要一些帮助!
答案 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)');
});
}