也许我缺少某些内容,但是我需要一个客户端数据库,以预先填充数据。

为了测试客户端数据库是否符合任务,我创建了一些使用虚拟数据的虚拟表 transaction.executeSql() 方法。但是根据我的收集,它需要每个创建表并插入查询的executesQL调用。我很懒,这对我来说似乎太多了。

我想知道...:我可以使用SQLite GUI快速创建SQLite表。我已经尝试导出一个SQL文件并将其全部运行在一个executesQL语句中,但这只是处理第一个“创建表”。

我不知道一次运行多个查询的事务对象的某种特殊方法吗?

这是用于移动野生动物园购买的方式, 根据苹果 使用SQLITE数据库为客户端数据库的内容供电。

有帮助吗?

解决方案

我将所有SQL代码都放入一个文件中,每行命令一个命令,然后使用AJAX将文件和循环循环在每行执行的每行上

提示:使用如果不存在的话,因此您可以每次启动数据库调用

其他提示

在命令行(在Linux框中)上,使用

sqlite3 myDatabase.sqlite .dump > myDatabase.sql

现在,您将SQLITE文件倾倒到普通的SQL文件。它将包含创建表语句和插入语句。

然后,某些客户端代码(可能需要进行一些调整,但您会得到这个想法)

首先,抓住SQL转储。 (例如使用jQuery)

$.get('./dumps/myDatabase.sql', function(response) {
  // console.log("got db dump!", response);
  var db = openDatabase('myDatabase', '1.0', 'myDatabase', 10000000);
  processQuery(db, 2, response.split(';\n'), 'myDatabase'); 
});

ProcessQuery函数一一处理所有语句,并默默地忽略错误。

function processQuery(db, i, queries, dbname) {
    if(i < queries.length -1) {
      console.log(i +' of '+queries.length);
      if(!queries[i+1].match(/(INSERT|CREATE|DROP|PRAGMA|BEGIN|COMMIT)/)) {
        queries[i+1] = queries[i]+ ';\n' + queries[i+1];
         return processQuery(db, i+1, queries, dbname);
      }
      console.log('------------>', queries[i]);
      db.transaction( function (query){ 
        query.executeSql(queries[i]+';', [], function(tx, result) {
          processQuery(db, i +1, queries,dbname);  
        });          
      }, function(err) { 
      console.log("Query error in ", queries[i], err.message);                          
      processQuery(db, i +1, queries, dbname);   
      });
  } else {
      console.log("Done importing!");
  }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top