【问题标题】:What's the simplest way to import an SQLite SQL file into a WEB SQL Database将 SQLite SQL 文件导入 WEB SQL 数据库的最简单方法是什么
【发布时间】:2010-05-14 13:39:50
【问题描述】:

也许我遗漏了一些东西,但我需要一个预先填充大量数据的客户端数据库。

为了测试客户端数据库是否能够胜任这项任务,我使用transaction.executeSql() 方法创建了一些带有虚拟数据的虚拟表。但据我所知,它需要对每个 CREATE TABLE 和 INSERT INTO 查询进行 executeSQL 调用。我很懒,这对我来说似乎工作太多了。

我想知道...:我可以使用 SQLite GUI 相当快地创建一个 SQLite 表。我尝试导出一个 SQL 文件并在一个 executeSQL 语句中运行它,但它只处理第一个“CREATE TABLE”位,没有任何插入。

是否有一些我不知道的用于一次运行多个查询的事务对象的特殊方法?

这是为 Mobile Safari 购买的方式,according to Apple 使用 SQLite 数据库为其客户端数据库提供支持。

【问题讨论】:

    标签: sql sqlite safari local-storage


    【解决方案1】:

    在命令行上(在 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!");
      }
    }
    

    【讨论】:

      【解决方案2】:

      我将所有 sql 代码放入一个文件中,每行一个命令,然后使用 ajax 提取文件并循环执行 sql 的每一行

      提示:使用 if not exists 这样你就可以每次调用它来初始化你的数据库

      【讨论】:

      • 拜托,你能提供一些代码吗?我有同样的问题,无法将 sql 脚本文件加载到动态创建的 web sql 数据库中。
      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2017-07-24
      • 2010-12-17
      相关资源
      最近更新 更多